Mercurial > cpython-lru_cache-weakref
annotate Modules/_sqlite/util.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 46d8fea24490 |
| children |
| rev | line source |
|---|---|
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
1 /* util.c - various utility functions |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
2 * |
|
64423
e9cd15d539e1
Welcome to the UTF-8 world.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59372
diff
changeset
|
3 * Copyright (C) 2005-2010 Gerhard Häring <gh@ghaering.de> |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
4 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
5 * This file is part of pysqlite. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
6 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
7 * This software is provided 'as-is', without any express or implied |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
8 * warranty. In no event will the authors be held liable for any damages |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
9 * arising from the use of this software. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
10 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
11 * Permission is granted to anyone to use this software for any purpose, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
12 * including commercial applications, and to alter it and redistribute it |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
13 * freely, subject to the following restrictions: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
14 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
15 * 1. The origin of this software must not be misrepresented; you must not |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
16 * claim that you wrote the original software. If you use this software |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
17 * in a product, an acknowledgment in the product documentation would be |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
18 * appreciated but is not required. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
19 * 2. Altered source versions must be plainly marked as such, and must not be |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
20 * misrepresented as being the original software. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
21 * 3. This notice may not be removed or altered from any source distribution. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
22 */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
23 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
24 #include "module.h" |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
25 #include "connection.h" |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
26 |
|
49178
8f886acaa142
Merged revisions 66394,66404,66412,66414,66424-66436 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
46178
diff
changeset
|
27 int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
28 { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
29 int rc; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
30 |
|
44291
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
31 if (statement == NULL) { |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
32 /* this is a workaround for SQLite 3.5 and later. it now apparently |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
33 * returns NULL for "no-operation" statements */ |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
34 rc = SQLITE_OK; |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
35 } else { |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
36 Py_BEGIN_ALLOW_THREADS |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
37 rc = sqlite3_step(statement); |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
38 Py_END_ALLOW_THREADS |
|
71623878057b
Merged revisions 59465-59487 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
40643
diff
changeset
|
39 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
40 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
41 return rc; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
42 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
43 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
44 /** |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
45 * Checks the SQLite error code and sets the appropriate DB-API exception. |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
46 * Returns the error code (0 means no error occurred). |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
47 */ |
|
46178
e06e08e8fdce
Bring sqlite3 module up-to-date with what's now in 2.6. Almost. I intentionally
Gerhard Häring <gh@ghaering.de>
parents:
44291
diff
changeset
|
48 int _pysqlite_seterror(sqlite3* db, sqlite3_stmt* st) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
49 { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
50 int errorcode; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
51 |
|
46178
e06e08e8fdce
Bring sqlite3 module up-to-date with what's now in 2.6. Almost. I intentionally
Gerhard Häring <gh@ghaering.de>
parents:
44291
diff
changeset
|
52 /* SQLite often doesn't report anything useful, unless you reset the statement first */ |
|
e06e08e8fdce
Bring sqlite3 module up-to-date with what's now in 2.6. Almost. I intentionally
Gerhard Häring <gh@ghaering.de>
parents:
44291
diff
changeset
|
53 if (st != NULL) { |
|
e06e08e8fdce
Bring sqlite3 module up-to-date with what's now in 2.6. Almost. I intentionally
Gerhard Häring <gh@ghaering.de>
parents:
44291
diff
changeset
|
54 (void)sqlite3_reset(st); |
|
e06e08e8fdce
Bring sqlite3 module up-to-date with what's now in 2.6. Almost. I intentionally
Gerhard Häring <gh@ghaering.de>
parents:
44291
diff
changeset
|
55 } |
|
e06e08e8fdce
Bring sqlite3 module up-to-date with what's now in 2.6. Almost. I intentionally
Gerhard Häring <gh@ghaering.de>
parents:
44291
diff
changeset
|
56 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
57 errorcode = sqlite3_errcode(db); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
58 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
59 switch (errorcode) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
60 { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
61 case SQLITE_OK: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
62 PyErr_Clear(); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
63 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
64 case SQLITE_INTERNAL: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
65 case SQLITE_NOTFOUND: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
66 PyErr_SetString(pysqlite_InternalError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
67 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
68 case SQLITE_NOMEM: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
69 (void)PyErr_NoMemory(); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
70 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
71 case SQLITE_ERROR: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
72 case SQLITE_PERM: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
73 case SQLITE_ABORT: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
74 case SQLITE_BUSY: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
75 case SQLITE_LOCKED: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
76 case SQLITE_READONLY: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
77 case SQLITE_INTERRUPT: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
78 case SQLITE_IOERR: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
79 case SQLITE_FULL: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
80 case SQLITE_CANTOPEN: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
81 case SQLITE_PROTOCOL: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
82 case SQLITE_EMPTY: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
83 case SQLITE_SCHEMA: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
84 PyErr_SetString(pysqlite_OperationalError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
85 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
86 case SQLITE_CORRUPT: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
87 PyErr_SetString(pysqlite_DatabaseError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
88 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
89 case SQLITE_TOOBIG: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
90 PyErr_SetString(pysqlite_DataError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
91 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
92 case SQLITE_CONSTRAINT: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
93 case SQLITE_MISMATCH: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
94 PyErr_SetString(pysqlite_IntegrityError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
95 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
96 case SQLITE_MISUSE: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
97 PyErr_SetString(pysqlite_ProgrammingError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
98 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
99 default: |
|
40643
47f9efdc0855
Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
100 PyErr_SetString(pysqlite_DatabaseError, sqlite3_errmsg(db)); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
101 break; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
102 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
103 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
104 return errorcode; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
105 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
diff
changeset
|
106 |
|
82055
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
107 #ifdef WORDS_BIGENDIAN |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
108 # define IS_LITTLE_ENDIAN 0 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
109 #else |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
110 # define IS_LITTLE_ENDIAN 1 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
111 #endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
112 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
113 PyObject * |
|
83528
b677f656c0bf
Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82055
diff
changeset
|
114 _pysqlite_long_from_int64(sqlite_int64 value) |
|
82055
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
115 { |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
116 #ifdef HAVE_LONG_LONG |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
117 # if SIZEOF_LONG_LONG < 8 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
118 if (value > PY_LLONG_MAX || value < PY_LLONG_MIN) { |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
119 return _PyLong_FromByteArray(&value, sizeof(value), |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
120 IS_LITTLE_ENDIAN, 1 /* signed */); |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
121 } |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
122 # endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
123 # if SIZEOF_LONG < SIZEOF_LONG_LONG |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
124 if (value > LONG_MAX || value < LONG_MIN) |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
125 return PyLong_FromLongLong(value); |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
126 # endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
127 #else |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
128 # if SIZEOF_LONG < 8 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
129 if (value > LONG_MAX || value < LONG_MIN) { |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
130 return _PyLong_FromByteArray(&value, sizeof(value), |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
131 IS_LITTLE_ENDIAN, 1 /* signed */); |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
132 } |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
133 # endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
134 #endif |
|
84018
46d8fea24490
Fix compilater warnings on Windows 64-bit
Victor Stinner <victor.stinner@gmail.com>
parents:
83528
diff
changeset
|
135 return PyLong_FromLong(Py_SAFE_DOWNCAST(value, sqlite_int64, long)); |
|
82055
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
136 } |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
137 |
|
83528
b677f656c0bf
Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82055
diff
changeset
|
138 sqlite_int64 |
|
82055
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
139 _pysqlite_long_as_int64(PyObject * py_val) |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
140 { |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
141 int overflow; |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
142 #ifdef HAVE_LONG_LONG |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
143 PY_LONG_LONG value = PyLong_AsLongLongAndOverflow(py_val, &overflow); |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
144 #else |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
145 long value = PyLong_AsLongAndOverflow(py_val, &overflow); |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
146 #endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
147 if (value == -1 && PyErr_Occurred()) |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
148 return -1; |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
149 if (!overflow) { |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
150 #ifdef HAVE_LONG_LONG |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
151 # if SIZEOF_LONG_LONG > 8 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
152 if (-0x8000000000000000LL <= value && value <= 0x7FFFFFFFFFFFFFFFLL) |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
153 # endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
154 #else |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
155 # if SIZEOF_LONG > 8 |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
156 if (-0x8000000000000000L <= value && value <= 0x7FFFFFFFFFFFFFFFL) |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
157 # endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
158 #endif |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
159 return value; |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
160 } |
|
83528
b677f656c0bf
Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82055
diff
changeset
|
161 else if (sizeof(value) < sizeof(sqlite_int64)) { |
|
b677f656c0bf
Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82055
diff
changeset
|
162 sqlite_int64 int64val; |
|
82055
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
163 if (_PyLong_AsByteArray((PyLongObject *)py_val, |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
164 (unsigned char *)&int64val, sizeof(int64val), |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
165 IS_LITTLE_ENDIAN, 1 /* signed */) >= 0) { |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
166 return int64val; |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
167 } |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
168 } |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
169 PyErr_SetString(PyExc_OverflowError, |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
170 "Python int too large to convert to SQLite INTEGER"); |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
171 return -1; |
|
55a89352e220
Issue #17073: Fix some integer overflows in sqlite3 module.
Serhiy Storchaka <storchaka@gmail.com>
parents:
64423
diff
changeset
|
172 } |
