Commit Graph

51 Commits

Author SHA1 Message Date
William S Fulton eac27f7d3e Python castmode minor tweaks
- Comment how and why LONG_MAX/ULONG_MAX is replaced by
  long_max/ulong_max.
- Use our conventional approach to detecting Python version in testcases.
- Convert use of testcase assert.
2023-12-24 18:09:57 +00:00
Markus Wick 5c008f0c52 python/cast_mode: Fix integer overflow of LONG_MAX+1.
In SWIG_CanCastAsInteger, we check for double(value) <= double(LONG_MAX).

However LONG_MAX cannot be represented as double if sizeof(long)=8, so it is usually rounded
to LONG_MAX+1. So SWIG_CanCastAsInteger returned true for LONG_MAX+1 and the next cast ended
up in an integer overflow.

Worse for unsigned long: It is called by smaller unsigned integers with range checks after
the convertion to unsigned long. As the integer overflow yields a 0x0, this is valid for all
small unsigned integers. Smaller signed integers will always fail this range check after the
integer overflow.

This fixes the tests on my machine:
  as_l(lmaxd + LSB)
  as_ll(llmaxd + LSB)
  as_ul(ulmax + LSB)
  as_ull(ullmax + LSB)

Wrong old results before this commit:
  as_l(float(2**63)) := -0x8000000000000000
  as_ll(float(2**63)) := -0x8000000000000000
  as_uc(float(2**64)) := 0x0
  as_us(float(2**64)) := 0x0
  as_ui(float(2**64)) := 0x0
  as_ul(float(2**64)) := 0x0
  as_ull(float(2**64)) := 0x0

Now all of them throw an exception.
2023-12-06 21:37:05 +01:00
brgirgis 0f48af8a05 Fix one casting warning on Linux (#787) 2016-09-12 09:21:20 +12:00
Mike Romberg 7dc5879714 castmode was failing overflow tests. Fix it. 2016-06-25 21:17:38 +01:00
Alec Cooper 2e1595a4d0 When possible, use PyInt rather than PyLong
This is especially important for the unsigned long typemap, which is used by
the size_t typemap, which is in turn used for lengths of std containers etc.
In Python2, len requires old-style classes' __len__ method return a PyIntObject
rather than a PyLongObject, so this supports that requirement.
2016-02-04 15:27:54 -05:00
Alec Cooper 4e2fc7d115 Don't use long long if it isn't available
Adds preprocessor checks to avoid defining functions that use long long if it isn't available
Effects the following languages: javascript, octave, perl, python, r, ruby, tcl
2016-01-06 16:52:37 -05:00
Alec Cooper ba01182ec4 Fixing Python primitive conversions
Don't mistakenly treat PyLong objects as PyInt objects in Python3.
  This resolves issues of large integers being incorrectly treated as -1 while also having
  an OverflowError set internally for converting PyLong->long and PyLong->double
Conversions from PyLong to long, unsigned long, long long, and unsigned long long now
raise OverflowError rather than TypeError when given an out of range value.
Removing unnecessary check for PyLong_AsLong when converting PyLong->unsigned long since the
call to PyLong_AsUnsignedLong will have covered this case.
2015-12-23 19:04:19 -05:00
William S Fulton 504c2030bb Change in default behaviour wrapping C++ bool for Python.
Only a Python True or False will now work for C++ bool parameters.
This fixes overloading bool with other types.
2014-03-08 12:04:19 +00:00
William S Fulton 5481270c2a Fix Python 3 inconsistency handling -ve numbers for unsigned C types.
An OverFlow error is now consistently thrown instead of a TypeError.

Fixes primitive_types testcase for Python 3
2013-05-25 10:36:14 +01:00
Vadim Zeitlin 0ca11c8b6f Fix overflow with parameters > LONG_MAX with Python 3.
The typemap incorrectly called PyInt_AsLong() if PyInt_Check() passed, but
this check is the same as PyLong_Check() for Python 3 and so the correct
PyLong_AsUnsignedLong() function was never called. As a consequence, passing
any value greater than LONG_MAX (e.g. 0x87654321 on 32 bit architectures) to a
function taking unsigned int, unsigned long or size_t parameter failed with an
overflow error being generated.

Fix this by simply disabling the part of the code dealing with PyInts for
Python 3 as there is no distinction between PyInt and PyLong there any more.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13877 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-11-09 17:57:42 +00:00
Stefan Zager 00328ccdb3 python: disambiguate SWIG_From_unsigned_SS_int and SWIG_From_unsigned_SS_long.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13106 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-05-23 04:05:11 +00:00
William S Fulton 68a135860d Revert rev 12835 as it introduces a failure in the test-suite (primitive_types test)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12983 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-04-14 17:30:03 +00:00
Stefan Zager 2bf6de71b8 bug 3429388: python unsigned integer handling on 32-bit architectures.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12835 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2011-11-05 03:35:03 +00:00
Stefan Zager 3cb76bb45e Slight tweak to output typemap for int
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12738 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2011-06-11 05:49:49 +00:00
Stefan Zager 50425dc95e For all long integer types, use PyLong_From* rather than PyInt_From*
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12732 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2011-06-03 18:42:38 +00:00
Olly Betts 8178898960 [python] Simpler code for SWIG_AsVal_bool() which fixes a "strict
aliasing" warning from GCC - patch from SF#1724581 by Andrew
Baumann.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9938 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2007-09-17 23:52:16 +00:00
Marcelo Matus a2c99f619d reduce the aliasing warnings (when compiling with CFLAGS='-O2 -Wstrict-aliasing=2') to the minimum, ie, enums and pointer to functions
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8883 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2006-02-23 21:43:33 +00:00
Marcelo Matus ce94984b71 fix errors for 32bit arch.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8523 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2006-01-23 00:33:19 +00:00
Marcelo Matus a032063785 fix cast from double to long long
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8458 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2006-01-15 09:18:58 +00:00
Marcelo Matus 689a94c1f6 fix missing long
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8456 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2006-01-15 08:44:46 +00:00
Marcelo Matus 7223672e09 securing the call to SWIG_IsOK, which is a macro
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8131 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-12-30 01:14:24 +00:00
Marcelo Matus 0e4b388ec9 add implicitconv support and cosmetics for cast rank
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8095 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-12-27 22:06:26 +00:00
Marcelo Matus 6bf5187168 add castmode in python and cleaning the castdispatch mechanism
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8051 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-12-23 09:22:17 +00:00
Marcelo Matus d6f0a99b3e fix bool AsVal
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7817 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-11-07 11:13:16 +00:00
Marcelo Matus 3c65cea431 Perl added to the Unified typemap library, cleaner way to use the library, and 'normalized' macro names
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7707 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-10-24 14:59:05 +00:00
Marcelo Matus 7e5e4fd1f9 massive typemap unification
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7676 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-10-18 13:24:15 +00:00
Marcelo Matus 233f1ab7e6 change the Int/Long check order, just in case since 'int' could be too permissive
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7312 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-06-21 18:55:43 +00:00
Marcelo Matus a83919ab69 remove the _AS_XX macros, just in case the Check methods are too permissive
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7311 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-06-21 18:52:04 +00:00
Marcelo Matus 3c93d884c7 fix more VC7.1 warnings
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7016 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-02-28 23:59:51 +00:00
Marcelo Matus 192e00615d More fix for warnings, and add some of the ideas of the Bill's 'labels' patch
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6998 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2005-02-24 23:48:20 +00:00
Marcelo Matus d8ae51668b fix include in bug #1076122
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6821 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-12-01 12:02:46 +00:00
Marcelo Matus 966290225e fix error in bool
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6817 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-12-01 01:20:42 +00:00
William S Fulton f0e60adb7b warning fixes for VC++
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6694 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-11-08 21:18:10 +00:00
Marcelo Matus 2d4f884ee0 fix warnings for MS compiler
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6585 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-11-01 22:16:52 +00:00
Marcelo Matus 09608bc2c5 more docs/split and cleaning
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6421 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-10-18 00:31:24 +00:00
Marcelo Matus 78293bbeee fix bug report 1039688
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6325 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-10-05 21:43:34 +00:00
Marcelo Matus e46c80edf8 replacing SWIGSTATIC(a) by SWIGINTERN a
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6290 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-10-02 20:15:46 +00:00
Marcelo Matus a4a7a2ff1f better error messages, more comments, clean up for the next major modifications
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6284 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-10-02 01:43:17 +00:00
Marcelo Matus 349e6bc6ee using <> when including lib files, fix char{ANY], add char FIXSIZE[ANY], fix pyfragments.swg, fixing *.swg and *.i names
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6250 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-09-17 06:17:35 +00:00
Marcelo Matus 1c899f9c96 fix solaris warning
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6183 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-08-31 20:15:54 +00:00
Marcelo Matus f473b1f152 added wchar_t type
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5835 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-04-06 06:31:24 +00:00
Marcelo Matus 86a9374ea1 fix more comp. warns
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5833 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-04-06 00:10:14 +00:00
Marcelo Matus e0e8157d0b suppress compiler warns and more cosmetics
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5830 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-04-05 20:20:36 +00:00
Marcelo Matus 1206afb516 fix bad FLT_MIN use
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5800 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-30 01:53:52 +00:00
Marcelo Matus f896efa6dd fixes for strings and cosmetics
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5792 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-28 13:34:16 +00:00
Marcelo Matus e6711328a6 more comments and cosmetic fixes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5789 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-23 01:07:45 +00:00
Marcelo Matus 7afe6bc139 normalizing the inout typemaps and other cosmetic fixes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5782 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-21 23:26:18 +00:00
Marcelo Matus 2568b57d46 extending std_string and more fixes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5771 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-18 21:20:55 +00:00
Marcelo Matus cf2e4870e7 another fix for long long
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5762 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-17 18:40:44 +00:00
Marcelo Matus 1d5529bcfc better STL support, see CHANGES.current
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5755 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2004-03-17 09:41:19 +00:00