You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1907 lines
56 KiB

20 years ago
  1. /* New getargs implementation */
  2. #include "Python.h"
  3. #include <ctype.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. int PyArg_Parse(PyObject *, const char *, ...);
  8. int PyArg_ParseTuple(PyObject *, const char *, ...);
  9. int PyArg_VaParse(PyObject *, const char *, va_list);
  10. int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
  11. const char *, char **, ...);
  12. int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
  13. const char *, char **, va_list);
  14. #ifdef HAVE_DECLSPEC_DLL
  15. /* Export functions */
  16. PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, char *, ...);
  17. PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, char *, ...);
  18. PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywords_SizeT(PyObject *, PyObject *,
  19. const char *, char **, ...);
  20. PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...);
  21. PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, char *, va_list);
  22. PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *, PyObject *,
  23. const char *, char **, va_list);
  24. #endif
  25. #define FLAG_COMPAT 1
  26. #define FLAG_SIZE_T 2
  27. /* Forward */
  28. static int vgetargs1(PyObject *, const char *, va_list *, int);
  29. static void seterror(int, const char *, int *, const char *, const char *);
  30. static char *convertitem(PyObject *, const char **, va_list *, int, int *,
  31. char *, size_t, PyObject **);
  32. static char *converttuple(PyObject *, const char **, va_list *, int,
  33. int *, char *, size_t, int, PyObject **);
  34. static char *convertsimple(PyObject *, const char **, va_list *, int, char *,
  35. size_t, PyObject **);
  36. static Py_ssize_t convertbuffer(PyObject *, void **p, char **);
  37. static int getbuffer(PyObject *, Py_buffer *, char**);
  38. static int vgetargskeywords(PyObject *, PyObject *,
  39. const char *, char **, va_list *, int);
  40. static char *skipitem(const char **, va_list *, int);
  41. int
  42. PyArg_Parse(PyObject *args, const char *format, ...)
  43. {
  44. int retval;
  45. va_list va;
  46. va_start(va, format);
  47. retval = vgetargs1(args, format, &va, FLAG_COMPAT);
  48. va_end(va);
  49. return retval;
  50. }
  51. int
  52. _PyArg_Parse_SizeT(PyObject *args, char *format, ...)
  53. {
  54. int retval;
  55. va_list va;
  56. va_start(va, format);
  57. retval = vgetargs1(args, format, &va, FLAG_COMPAT|FLAG_SIZE_T);
  58. va_end(va);
  59. return retval;
  60. }
  61. int
  62. PyArg_ParseTuple(PyObject *args, const char *format, ...)
  63. {
  64. int retval;
  65. va_list va;
  66. va_start(va, format);
  67. retval = vgetargs1(args, format, &va, 0);
  68. va_end(va);
  69. return retval;
  70. }
  71. int
  72. _PyArg_ParseTuple_SizeT(PyObject *args, char *format, ...)
  73. {
  74. int retval;
  75. va_list va;
  76. va_start(va, format);
  77. retval = vgetargs1(args, format, &va, FLAG_SIZE_T);
  78. va_end(va);
  79. return retval;
  80. }
  81. int
  82. PyArg_VaParse(PyObject *args, const char *format, va_list va)
  83. {
  84. va_list lva;
  85. #ifdef VA_LIST_IS_ARRAY
  86. memcpy(lva, va, sizeof(va_list));
  87. #else
  88. #ifdef __va_copy
  89. __va_copy(lva, va);
  90. #else
  91. lva = va;
  92. #endif
  93. #endif
  94. return vgetargs1(args, format, &lva, 0);
  95. }
  96. int
  97. _PyArg_VaParse_SizeT(PyObject *args, char *format, va_list va)
  98. {
  99. va_list lva;
  100. #ifdef VA_LIST_IS_ARRAY
  101. memcpy(lva, va, sizeof(va_list));
  102. #else
  103. #ifdef __va_copy
  104. __va_copy(lva, va);
  105. #else
  106. lva = va;
  107. #endif
  108. #endif
  109. return vgetargs1(args, format, &lva, FLAG_SIZE_T);
  110. }
  111. /* Handle cleanup of allocated memory in case of exception */
  112. #define GETARGS_CAPSULE_NAME_CLEANUP_PTR "getargs.cleanup_ptr"
  113. #define GETARGS_CAPSULE_NAME_CLEANUP_BUFFER "getargs.cleanup_buffer"
  114. static void
  115. cleanup_ptr(PyObject *self)
  116. {
  117. void *ptr = PyCapsule_GetPointer(self, GETARGS_CAPSULE_NAME_CLEANUP_PTR);
  118. if (ptr) {
  119. PyMem_FREE(ptr);
  120. }
  121. }
  122. static void
  123. cleanup_buffer(PyObject *self)
  124. {
  125. Py_buffer *ptr = (Py_buffer *)PyCapsule_GetPointer(self, GETARGS_CAPSULE_NAME_CLEANUP_BUFFER);
  126. if (ptr) {
  127. PyBuffer_Release(ptr);
  128. }
  129. }
  130. static int
  131. addcleanup(void *ptr, PyObject **freelist, PyCapsule_Destructor destr)
  132. {
  133. PyObject *cobj;
  134. const char *name;
  135. if (!*freelist) {
  136. *freelist = PyList_New(0);
  137. if (!*freelist) {
  138. destr(ptr);
  139. return -1;
  140. }
  141. }
  142. if (destr == cleanup_ptr) {
  143. name = GETARGS_CAPSULE_NAME_CLEANUP_PTR;
  144. } else if (destr == cleanup_buffer) {
  145. name = GETARGS_CAPSULE_NAME_CLEANUP_BUFFER;
  146. } else {
  147. return -1;
  148. }
  149. cobj = PyCapsule_New(ptr, name, destr);
  150. if (!cobj) {
  151. destr(ptr);
  152. return -1;
  153. }
  154. if (PyList_Append(*freelist, cobj)) {
  155. Py_DECREF(cobj);
  156. return -1;
  157. }
  158. Py_DECREF(cobj);
  159. return 0;
  160. }
  161. static int
  162. cleanreturn(int retval, PyObject *freelist)
  163. {
  164. if (freelist && retval != 0) {
  165. /* We were successful, reset the destructors so that they
  166. don't get called. */
  167. Py_ssize_t len = PyList_GET_SIZE(freelist), i;
  168. for (i = 0; i < len; i++)
  169. PyCapsule_SetDestructor(PyList_GET_ITEM(freelist, i), NULL);
  170. }
  171. Py_XDECREF(freelist);
  172. return retval;
  173. }
  174. static int
  175. vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags)
  176. {
  177. char msgbuf[256];
  178. int levels[32];
  179. const char *fname = NULL;
  180. const char *message = NULL;
  181. int min = -1;
  182. int max = 0;
  183. int level = 0;
  184. int endfmt = 0;
  185. const char *formatsave = format;
  186. Py_ssize_t i, len;
  187. char *msg;
  188. PyObject *freelist = NULL;
  189. int compat = flags & FLAG_COMPAT;
  190. assert(compat || (args != (PyObject*)NULL));
  191. flags = flags & ~FLAG_COMPAT;
  192. while (endfmt == 0) {
  193. int c = *format++;
  194. switch (c) {
  195. case '(':
  196. if (level == 0)
  197. max++;
  198. level++;
  199. if (level >= 30)
  200. Py_FatalError("too many tuple nesting levels "
  201. "in argument format string");
  202. break;
  203. case ')':
  204. if (level == 0)
  205. Py_FatalError("excess ')' in getargs format");
  206. else
  207. level--;
  208. break;
  209. case '\0':
  210. endfmt = 1;
  211. break;
  212. case ':':
  213. fname = format;
  214. endfmt = 1;
  215. break;
  216. case ';':
  217. message = format;
  218. endfmt = 1;
  219. break;
  220. default:
  221. if (level == 0) {
  222. if (c == 'O')
  223. max++;
  224. else if (isalpha(Py_CHARMASK(c))) {
  225. if (c != 'e') /* skip encoded */
  226. max++;
  227. } else if (c == '|')
  228. min = max;
  229. }
  230. break;
  231. }
  232. }
  233. if (level != 0)
  234. Py_FatalError(/* '(' */ "missing ')' in getargs format");
  235. if (min < 0)
  236. min = max;
  237. format = formatsave;
  238. if (compat) {
  239. if (max == 0) {
  240. if (args == NULL)
  241. return 1;
  242. PyOS_snprintf(msgbuf, sizeof(msgbuf),
  243. "%.200s%s takes no arguments",
  244. fname==NULL ? "function" : fname,
  245. fname==NULL ? "" : "()");
  246. PyErr_SetString(PyExc_TypeError, msgbuf);
  247. return 0;
  248. }
  249. else if (min == 1 && max == 1) {
  250. if (args == NULL) {
  251. PyOS_snprintf(msgbuf, sizeof(msgbuf),
  252. "%.200s%s takes at least one argument",
  253. fname==NULL ? "function" : fname,
  254. fname==NULL ? "" : "()");
  255. PyErr_SetString(PyExc_TypeError, msgbuf);
  256. return 0;
  257. }
  258. msg = convertitem(args, &format, p_va, flags, levels,
  259. msgbuf, sizeof(msgbuf), &freelist);
  260. if (msg == NULL)
  261. return cleanreturn(1, freelist);
  262. seterror(levels[0], msg, levels+1, fname, message);
  263. return cleanreturn(0, freelist);
  264. }
  265. else {
  266. PyErr_SetString(PyExc_SystemError,
  267. "old style getargs format uses new features");
  268. return 0;
  269. }
  270. }
  271. if (!PyTuple_Check(args)) {
  272. PyErr_SetString(PyExc_SystemError,
  273. "new style getargs format but argument is not a tuple");
  274. return 0;
  275. }
  276. len = PyTuple_GET_SIZE(args);
  277. if (len < min || max < len) {
  278. if (message == NULL) {
  279. PyOS_snprintf(msgbuf, sizeof(msgbuf),
  280. "%.150s%s takes %s %d argument%s "
  281. "(%ld given)",
  282. fname==NULL ? "function" : fname,
  283. fname==NULL ? "" : "()",
  284. min==max ? "exactly"
  285. : len < min ? "at least" : "at most",
  286. len < min ? min : max,
  287. (len < min ? min : max) == 1 ? "" : "s",
  288. Py_SAFE_DOWNCAST(len, Py_ssize_t, long));
  289. message = msgbuf;
  290. }
  291. PyErr_SetString(PyExc_TypeError, message);
  292. return 0;
  293. }
  294. for (i = 0; i < len; i++) {
  295. if (*format == '|')
  296. format++;
  297. msg = convertitem(PyTuple_GET_ITEM(args, i), &format, p_va,
  298. flags, levels, msgbuf,
  299. sizeof(msgbuf), &freelist);
  300. if (msg) {
  301. seterror(i+1, msg, levels, fname, msg);
  302. return cleanreturn(0, freelist);
  303. }
  304. }
  305. if (*format != '\0' && !isalpha(Py_CHARMASK(*format)) &&
  306. *format != '(' &&
  307. *format != '|' && *format != ':' && *format != ';') {
  308. PyErr_Format(PyExc_SystemError,
  309. "bad format string: %.200s", formatsave);
  310. return cleanreturn(0, freelist);
  311. }
  312. return cleanreturn(1, freelist);
  313. }
  314. static void
  315. seterror(int iarg, const char *msg, int *levels, const char *fname,
  316. const char *message)
  317. {
  318. char buf[512];
  319. int i;
  320. char *p = buf;
  321. if (PyErr_Occurred())
  322. return;
  323. else if (message == NULL) {
  324. if (fname != NULL) {
  325. PyOS_snprintf(p, sizeof(buf), "%.200s() ", fname);
  326. p += strlen(p);
  327. }
  328. if (iarg != 0) {
  329. PyOS_snprintf(p, sizeof(buf) - (p - buf),
  330. "argument %d", iarg);
  331. i = 0;
  332. p += strlen(p);
  333. while (levels[i] > 0 && i < 32 && (int)(p-buf) < 220) {
  334. PyOS_snprintf(p, sizeof(buf) - (p - buf),
  335. ", item %d", levels[i]-1);
  336. p += strlen(p);
  337. i++;
  338. }
  339. }
  340. else {
  341. PyOS_snprintf(p, sizeof(buf) - (p - buf), "argument");
  342. p += strlen(p);
  343. }
  344. PyOS_snprintf(p, sizeof(buf) - (p - buf), " %.256s", msg);
  345. message = buf;
  346. }
  347. PyErr_SetString(PyExc_TypeError, message);
  348. }
  349. /* Convert a tuple argument.
  350. On entry, *p_format points to the character _after_ the opening '('.
  351. On successful exit, *p_format points to the closing ')'.
  352. If successful:
  353. *p_format and *p_va are updated,
  354. *levels and *msgbuf are untouched,
  355. and NULL is returned.
  356. If the argument is invalid:
  357. *p_format is unchanged,
  358. *p_va is undefined,
  359. *levels is a 0-terminated list of item numbers,
  360. *msgbuf contains an error message, whose format is:
  361. "must be <typename1>, not <typename2>", where:
  362. <typename1> is the name of the expected type, and
  363. <typename2> is the name of the actual type,
  364. and msgbuf is returned.
  365. */
  366. static char *
  367. converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
  368. int *levels, char *msgbuf, size_t bufsize, int toplevel,
  369. PyObject **freelist)
  370. {
  371. int level = 0;
  372. int n = 0;
  373. const char *format = *p_format;
  374. int i;
  375. for (;;) {
  376. int c = *format++;
  377. if (c == '(') {
  378. if (level == 0)
  379. n++;
  380. level++;
  381. }
  382. else if (c == ')') {
  383. if (level == 0)
  384. break;
  385. level--;
  386. }
  387. else if (c == ':' || c == ';' || c == '\0')
  388. break;
  389. else if (level == 0 && isalpha(Py_CHARMASK(c)))
  390. n++;
  391. }
  392. if (!PySequence_Check(arg) || PyString_Check(arg)) {
  393. levels[0] = 0;
  394. PyOS_snprintf(msgbuf, bufsize,
  395. toplevel ? "expected %d arguments, not %.50s" :
  396. "must be %d-item sequence, not %.50s",
  397. n,
  398. arg == Py_None ? "None" : arg->ob_type->tp_name);
  399. return msgbuf;
  400. }
  401. if ((i = PySequence_Size(arg)) != n) {
  402. levels[0] = 0;
  403. PyOS_snprintf(msgbuf, bufsize,
  404. toplevel ? "expected %d arguments, not %d" :
  405. "must be sequence of length %d, not %d",
  406. n, i);
  407. return msgbuf;
  408. }
  409. format = *p_format;
  410. for (i = 0; i < n; i++) {
  411. char *msg;
  412. PyObject *item;
  413. item = PySequence_GetItem(arg, i);
  414. if (item == NULL) {
  415. PyErr_Clear();
  416. levels[0] = i+1;
  417. levels[1] = 0;
  418. strncpy(msgbuf, "is not retrievable", bufsize);
  419. return msgbuf;
  420. }
  421. msg = convertitem(item, &format, p_va, flags, levels+1,
  422. msgbuf, bufsize, freelist);
  423. /* PySequence_GetItem calls tp->sq_item, which INCREFs */
  424. Py_XDECREF(item);
  425. if (msg != NULL) {
  426. levels[0] = i+1;
  427. return msg;
  428. }
  429. }
  430. *p_format = format;
  431. return NULL;
  432. }
  433. /* Convert a single item. */
  434. static char *
  435. convertitem(PyObject *arg, const char **p_format, va_list *p_va, int flags,
  436. int *levels, char *msgbuf, size_t bufsize, PyObject **freelist)
  437. {
  438. char *msg;
  439. const char *format = *p_format;
  440. if (*format == '(' /* ')' */) {
  441. format++;
  442. msg = converttuple(arg, &format, p_va, flags, levels, msgbuf,
  443. bufsize, 0, freelist);
  444. if (msg == NULL)
  445. format++;
  446. }
  447. else {
  448. msg = convertsimple(arg, &format, p_va, flags,
  449. msgbuf, bufsize, freelist);
  450. if (msg != NULL)
  451. levels[0] = 0;
  452. }
  453. if (msg == NULL)
  454. *p_format = format;
  455. return msg;
  456. }
  457. #define UNICODE_DEFAULT_ENCODING(arg) \
  458. _PyUnicode_AsDefaultEncodedString(arg, NULL)
  459. /* Format an error message generated by convertsimple(). */
  460. static char *
  461. converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize)
  462. {
  463. assert(expected != NULL);
  464. assert(arg != NULL);
  465. PyOS_snprintf(msgbuf, bufsize,
  466. "must be %.50s, not %.50s", expected,
  467. arg == Py_None ? "None" : arg->ob_type->tp_name);
  468. return msgbuf;
  469. }
  470. #define CONV_UNICODE "(unicode conversion error)"
  471. /* explicitly check for float arguments when integers are expected. For now
  472. * signal a warning. Returns true if an exception was raised. */
  473. static int
  474. float_argument_warning(PyObject *arg)
  475. {
  476. if (PyFloat_Check(arg) &&
  477. PyErr_Warn(PyExc_DeprecationWarning,
  478. "integer argument expected, got float" ))
  479. return 1;
  480. else
  481. return 0;
  482. }
  483. /* explicitly check for float arguments when integers are expected. Raises
  484. TypeError and returns true for float arguments. */
  485. static int
  486. float_argument_error(PyObject *arg)
  487. {
  488. if (PyFloat_Check(arg)) {
  489. PyErr_SetString(PyExc_TypeError,
  490. "integer argument expected, got float");
  491. return 1;
  492. }
  493. else
  494. return 0;
  495. }
  496. /* Convert a non-tuple argument. Return NULL if conversion went OK,
  497. or a string with a message describing the failure. The message is
  498. formatted as "must be <desired type>, not <actual type>".
  499. When failing, an exception may or may not have been raised.
  500. Don't call if a tuple is expected.
  501. When you add new format codes, please don't forget poor skipitem() below.
  502. */
  503. static char *
  504. convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
  505. char *msgbuf, size_t bufsize, PyObject **freelist)
  506. {
  507. /* For # codes */
  508. #define FETCH_SIZE int *q=NULL;Py_ssize_t *q2=NULL;\
  509. if (flags & FLAG_SIZE_T) q2=va_arg(*p_va, Py_ssize_t*); \
  510. else q=va_arg(*p_va, int*);
  511. #define STORE_SIZE(s) \
  512. if (flags & FLAG_SIZE_T) \
  513. *q2=s; \
  514. else { \
  515. if (INT_MAX < s) { \
  516. PyErr_SetString(PyExc_OverflowError, \
  517. "size does not fit in an int"); \
  518. return converterr("", arg, msgbuf, bufsize); \
  519. } \
  520. *q=s; \
  521. }
  522. #define BUFFER_LEN ((flags & FLAG_SIZE_T) ? *q2:*q)
  523. const char *format = *p_format;
  524. char c = *format++;
  525. #ifdef Py_USING_UNICODE
  526. PyObject *uarg;
  527. #endif
  528. switch (c) {
  529. case 'b': { /* unsigned byte -- very short int */
  530. char *p = va_arg(*p_va, char *);
  531. long ival;
  532. if (float_argument_error(arg))
  533. return converterr("integer<b>", arg, msgbuf, bufsize);
  534. ival = PyInt_AsLong(arg);
  535. if (ival == -1 && PyErr_Occurred())
  536. return converterr("integer<b>", arg, msgbuf, bufsize);
  537. else if (ival < 0) {
  538. PyErr_SetString(PyExc_OverflowError,
  539. "unsigned byte integer is less than minimum");
  540. return converterr("integer<b>", arg, msgbuf, bufsize);
  541. }
  542. else if (ival > UCHAR_MAX) {
  543. PyErr_SetString(PyExc_OverflowError,
  544. "unsigned byte integer is greater than maximum");
  545. return converterr("integer<b>", arg, msgbuf, bufsize);
  546. }
  547. else
  548. *p = (unsigned char) ival;
  549. break;
  550. }
  551. case 'B': {/* byte sized bitfield - both signed and unsigned
  552. values allowed */
  553. char *p = va_arg(*p_va, char *);
  554. long ival;
  555. if (float_argument_error(arg))
  556. return converterr("integer<B>", arg, msgbuf, bufsize);
  557. ival = PyInt_AsUnsignedLongMask(arg);
  558. if (ival == -1 && PyErr_Occurred())
  559. return converterr("integer<B>", arg, msgbuf, bufsize);
  560. else
  561. *p = (unsigned char) ival;
  562. break;
  563. }
  564. case 'h': {/* signed short int */
  565. short *p = va_arg(*p_va, short *);
  566. long ival;
  567. if (float_argument_error(arg))
  568. return converterr("integer<h>", arg, msgbuf, bufsize);
  569. ival = PyInt_AsLong(arg);
  570. if (ival == -1 && PyErr_Occurred())
  571. return converterr("integer<h>", arg, msgbuf, bufsize);
  572. else if (ival < SHRT_MIN) {
  573. PyErr_SetString(PyExc_OverflowError,
  574. "signed short integer is less than minimum");
  575. return converterr("integer<h>", arg, msgbuf, bufsize);
  576. }
  577. else if (ival > SHRT_MAX) {
  578. PyErr_SetString(PyExc_OverflowError,
  579. "signed short integer is greater than maximum");
  580. return converterr("integer<h>", arg, msgbuf, bufsize);
  581. }
  582. else
  583. *p = (short) ival;
  584. break;
  585. }
  586. case 'H': { /* short int sized bitfield, both signed and
  587. unsigned allowed */
  588. unsigned short *p = va_arg(*p_va, unsigned short *);
  589. long ival;
  590. if (float_argument_error(arg))
  591. return converterr("integer<H>", arg, msgbuf, bufsize);
  592. ival = PyInt_AsUnsignedLongMask(arg);
  593. if (ival == -1 && PyErr_Occurred())
  594. return converterr("integer<H>", arg, msgbuf, bufsize);
  595. else
  596. *p = (unsigned short) ival;
  597. break;
  598. }
  599. case 'i': {/* signed int */
  600. int *p = va_arg(*p_va, int *);
  601. long ival;
  602. if (float_argument_error(arg))
  603. return converterr("integer<i>", arg, msgbuf, bufsize);
  604. ival = PyInt_AsLong(arg);
  605. if (ival == -1 && PyErr_Occurred())
  606. return converterr("integer<i>", arg, msgbuf, bufsize);
  607. else if (ival > INT_MAX) {
  608. PyErr_SetString(PyExc_OverflowError,
  609. "signed integer is greater than maximum");
  610. return converterr("integer<i>", arg, msgbuf, bufsize);
  611. }
  612. else if (ival < INT_MIN) {
  613. PyErr_SetString(PyExc_OverflowError,
  614. "signed integer is less than minimum");
  615. return converterr("integer<i>", arg, msgbuf, bufsize);
  616. }
  617. else
  618. *p = ival;
  619. break;
  620. }
  621. case 'I': { /* int sized bitfield, both signed and
  622. unsigned allowed */
  623. unsigned int *p = va_arg(*p_va, unsigned int *);
  624. unsigned int ival;
  625. if (float_argument_error(arg))
  626. return converterr("integer<I>", arg, msgbuf, bufsize);
  627. ival = (unsigned int)PyInt_AsUnsignedLongMask(arg);
  628. if (ival == (unsigned int)-1 && PyErr_Occurred())
  629. return converterr("integer<I>", arg, msgbuf, bufsize);
  630. else
  631. *p = ival;
  632. break;
  633. }
  634. case 'n': /* Py_ssize_t */
  635. #if SIZEOF_SIZE_T != SIZEOF_LONG
  636. {
  637. Py_ssize_t *p = va_arg(*p_va, Py_ssize_t *);
  638. Py_ssize_t ival;
  639. if (float_argument_error(arg))
  640. return converterr("integer<n>", arg, msgbuf, bufsize);
  641. ival = PyInt_AsSsize_t(arg);
  642. if (ival == -1 && PyErr_Occurred())
  643. return converterr("integer<n>", arg, msgbuf, bufsize);
  644. *p = ival;
  645. break;
  646. }
  647. #endif
  648. /* Fall through from 'n' to 'l' if Py_ssize_t is int */
  649. case 'l': {/* long int */
  650. long *p = va_arg(*p_va, long *);
  651. long ival;
  652. if (float_argument_error(arg))
  653. return converterr("integer<l>", arg, msgbuf, bufsize);
  654. ival = PyInt_AsLong(arg);
  655. if (ival == -1 && PyErr_Occurred())
  656. return converterr("integer<l>", arg, msgbuf, bufsize);
  657. else
  658. *p = ival;
  659. break;
  660. }
  661. case 'k': { /* long sized bitfield */
  662. unsigned long *p = va_arg(*p_va, unsigned long *);
  663. unsigned long ival;
  664. if (PyInt_Check(arg))
  665. ival = PyInt_AsUnsignedLongMask(arg);
  666. else if (PyLong_Check(arg))
  667. ival = PyLong_AsUnsignedLongMask(arg);
  668. else
  669. return converterr("integer<k>", arg, msgbuf, bufsize);
  670. *p = ival;
  671. break;
  672. }
  673. #ifdef HAVE_LONG_LONG
  674. case 'L': {/* PY_LONG_LONG */
  675. PY_LONG_LONG *p = va_arg( *p_va, PY_LONG_LONG * );
  676. PY_LONG_LONG ival;
  677. if (float_argument_warning(arg))
  678. return converterr("long<L>", arg, msgbuf, bufsize);
  679. ival = PyLong_AsLongLong(arg);
  680. if (ival == (PY_LONG_LONG)-1 && PyErr_Occurred() ) {
  681. return converterr("long<L>", arg, msgbuf, bufsize);
  682. } else {
  683. *p = ival;
  684. }
  685. break;
  686. }
  687. case 'K': { /* long long sized bitfield */
  688. unsigned PY_LONG_LONG *p = va_arg(*p_va, unsigned PY_LONG_LONG *);
  689. unsigned PY_LONG_LONG ival;
  690. if (PyInt_Check(arg))
  691. ival = PyInt_AsUnsignedLongMask(arg);
  692. else if (PyLong_Check(arg))
  693. ival = PyLong_AsUnsignedLongLongMask(arg);
  694. else
  695. return converterr("integer<K>", arg, msgbuf, bufsize);
  696. *p = ival;
  697. break;
  698. }
  699. #endif
  700. case 'f': {/* float */
  701. float *p = va_arg(*p_va, float *);
  702. double dval = PyFloat_AsDouble(arg);
  703. if (PyErr_Occurred())
  704. return converterr("float<f>", arg, msgbuf, bufsize);
  705. else
  706. *p = (float) dval;
  707. break;
  708. }
  709. case 'd': {/* double */
  710. double *p = va_arg(*p_va, double *);
  711. double dval = PyFloat_AsDouble(arg);
  712. if (PyErr_Occurred())
  713. return converterr("float<d>", arg, msgbuf, bufsize);
  714. else
  715. *p = dval;
  716. break;
  717. }
  718. #ifndef WITHOUT_COMPLEX
  719. case 'D': {/* complex double */
  720. Py_complex *p = va_arg(*p_va, Py_complex *);
  721. Py_complex cval;
  722. cval = PyComplex_AsCComplex(arg);
  723. if (PyErr_Occurred())
  724. return converterr("complex<D>", arg, msgbuf, bufsize);
  725. else
  726. *p = cval;
  727. break;
  728. }
  729. #endif /* WITHOUT_COMPLEX */
  730. case 'c': {/* char */
  731. char *p = va_arg(*p_va, char *);
  732. if (PyString_Check(arg) && PyString_Size(arg) == 1)
  733. *p = PyString_AS_STRING(arg)[0];
  734. else
  735. return converterr("char", arg, msgbuf, bufsize);
  736. break;
  737. }
  738. case 's': {/* string */
  739. if (*format == '*') {
  740. Py_buffer *p = (Py_buffer *)va_arg(*p_va, Py_buffer *);
  741. if (PyString_Check(arg)) {
  742. PyBuffer_FillInfo(p, arg,
  743. PyString_AS_STRING(arg), PyString_GET_SIZE(arg),
  744. 1, 0);
  745. }
  746. #ifdef Py_USING_UNICODE
  747. else if (PyUnicode_Check(arg)) {
  748. uarg = UNICODE_DEFAULT_ENCODING(arg);
  749. if (uarg == NULL)
  750. return converterr(CONV_UNICODE,
  751. arg, msgbuf, bufsize);
  752. PyBuffer_FillInfo(p, arg,
  753. PyString_AS_STRING(uarg), PyString_GET_SIZE(uarg),
  754. 1, 0);
  755. }
  756. #endif
  757. else { /* any buffer-like object */
  758. char *buf;
  759. if (getbuffer(arg, p, &buf) < 0)
  760. return converterr(buf, arg, msgbuf, bufsize);
  761. }
  762. if (addcleanup(p, freelist, cleanup_buffer)) {
  763. return converterr(
  764. "(cleanup problem)",
  765. arg, msgbuf, bufsize);
  766. }
  767. format++;
  768. } else if (*format == '#') {
  769. void **p = (void **)va_arg(*p_va, char **);
  770. FETCH_SIZE;
  771. if (PyString_Check(arg)) {
  772. *p = PyString_AS_STRING(arg);
  773. STORE_SIZE(PyString_GET_SIZE(arg));
  774. }
  775. #ifdef Py_USING_UNICODE
  776. else if (PyUnicode_Check(arg)) {
  777. uarg = UNICODE_DEFAULT_ENCODING(arg);
  778. if (uarg == NULL)
  779. return converterr(CONV_UNICODE,
  780. arg, msgbuf, bufsize);
  781. *p = PyString_AS_STRING(uarg);
  782. STORE_SIZE(PyString_GET_SIZE(uarg));
  783. }
  784. #endif
  785. else { /* any buffer-like object */
  786. char *buf;
  787. Py_ssize_t count = convertbuffer(arg, p, &buf);
  788. if (count < 0)
  789. return converterr(buf, arg, msgbuf, bufsize);
  790. STORE_SIZE(count);
  791. }
  792. format++;
  793. } else {
  794. char **p = va_arg(*p_va, char **);
  795. if (PyString_Check(arg))
  796. *p = PyString_AS_STRING(arg);
  797. #ifdef Py_USING_UNICODE
  798. else if (PyUnicode_Check(arg)) {
  799. uarg = UNICODE_DEFAULT_ENCODING(arg);
  800. if (uarg == NULL)
  801. return converterr(CONV_UNICODE,
  802. arg, msgbuf, bufsize);
  803. *p = PyString_AS_STRING(uarg);
  804. }
  805. #endif
  806. else
  807. return converterr("string", arg, msgbuf, bufsize);
  808. if ((Py_ssize_t)strlen(*p) != PyString_Size(arg))
  809. return converterr("string without null bytes",
  810. arg, msgbuf, bufsize);
  811. }
  812. break;
  813. }
  814. case 'z': {/* string, may be NULL (None) */
  815. if (*format == '*') {
  816. Py_buffer *p = (Py_buffer *)va_arg(*p_va, Py_buffer *);
  817. if (arg == Py_None)
  818. PyBuffer_FillInfo(p, NULL, NULL, 0, 1, 0);
  819. else if (PyString_Check(arg)) {
  820. PyBuffer_FillInfo(p, arg,
  821. PyString_AS_STRING(arg), PyString_GET_SIZE(arg),
  822. 1, 0);
  823. }
  824. #ifdef Py_USING_UNICODE
  825. else if (PyUnicode_Check(arg)) {
  826. uarg = UNICODE_DEFAULT_ENCODING(arg);
  827. if (uarg == NULL)
  828. return converterr(CONV_UNICODE,
  829. arg, msgbuf, bufsize);
  830. PyBuffer_FillInfo(p, arg,
  831. PyString_AS_STRING(uarg), PyString_GET_SIZE(uarg),
  832. 1, 0);
  833. }
  834. #endif
  835. else { /* any buffer-like object */
  836. char *buf;
  837. if (getbuffer(arg, p, &buf) < 0)
  838. return converterr(buf, arg, msgbuf, bufsize);
  839. }
  840. if (addcleanup(p, freelist, cleanup_buffer)) {
  841. return converterr(
  842. "(cleanup problem)",
  843. arg, msgbuf, bufsize);
  844. }
  845. format++;
  846. } else if (*format == '#') { /* any buffer-like object */
  847. void **p = (void **)va_arg(*p_va, char **);
  848. FETCH_SIZE;
  849. if (arg == Py_None) {
  850. *p = 0;
  851. STORE_SIZE(0);
  852. }
  853. else if (PyString_Check(arg)) {
  854. *p = PyString_AS_STRING(arg);
  855. STORE_SIZE(PyString_GET_SIZE(arg));
  856. }
  857. #ifdef Py_USING_UNICODE
  858. else if (PyUnicode_Check(arg)) {
  859. uarg = UNICODE_DEFAULT_ENCODING(arg);
  860. if (uarg == NULL)
  861. return converterr(CONV_UNICODE,
  862. arg, msgbuf, bufsize);
  863. *p = PyString_AS_STRING(uarg);
  864. STORE_SIZE(PyString_GET_SIZE(uarg));
  865. }
  866. #endif
  867. else { /* any buffer-like object */
  868. char *buf;
  869. Py_ssize_t count = convertbuffer(arg, p, &buf);
  870. if (count < 0)
  871. return converterr(buf, arg, msgbuf, bufsize);
  872. STORE_SIZE(count);
  873. }
  874. format++;
  875. } else {
  876. char **p = va_arg(*p_va, char **);
  877. if (arg == Py_None)
  878. *p = 0;
  879. else if (PyString_Check(arg))
  880. *p = PyString_AS_STRING(arg);
  881. #ifdef Py_USING_UNICODE
  882. else if (PyUnicode_Check(arg)) {
  883. uarg = UNICODE_DEFAULT_ENCODING(arg);
  884. if (uarg == NULL)
  885. return converterr(CONV_UNICODE,
  886. arg, msgbuf, bufsize);
  887. *p = PyString_AS_STRING(uarg);
  888. }
  889. #endif
  890. else
  891. return converterr("string or None",
  892. arg, msgbuf, bufsize);
  893. if (*format == '#') {
  894. FETCH_SIZE;
  895. assert(0); /* XXX redundant with if-case */
  896. if (arg == Py_None) {
  897. STORE_SIZE(0);
  898. } else {
  899. STORE_SIZE(PyString_Size(arg));
  900. }
  901. format++;
  902. }
  903. else if (*p != NULL &&
  904. (Py_ssize_t)strlen(*p) != PyString_Size(arg))
  905. return converterr(
  906. "string without null bytes or None",
  907. arg, msgbuf, bufsize);
  908. }
  909. break;
  910. }
  911. case 'e': {/* encoded string */
  912. char **buffer;
  913. const char *encoding;
  914. PyObject *s;
  915. Py_ssize_t size;
  916. int recode_strings;
  917. /* Get 'e' parameter: the encoding name */
  918. encoding = (const char *)va_arg(*p_va, const char *);
  919. #ifdef Py_USING_UNICODE
  920. if (encoding == NULL)
  921. encoding = PyUnicode_GetDefaultEncoding();
  922. #endif
  923. /* Get output buffer parameter:
  924. 's' (recode all objects via Unicode) or
  925. 't' (only recode non-string objects)
  926. */
  927. if (*format == 's')
  928. recode_strings = 1;
  929. else if (*format == 't')
  930. recode_strings = 0;
  931. else
  932. return converterr(
  933. "(unknown parser marker combination)",
  934. arg, msgbuf, bufsize);
  935. buffer = (char **)va_arg(*p_va, char **);
  936. format++;
  937. if (buffer == NULL)
  938. return converterr("(buffer is NULL)",
  939. arg, msgbuf, bufsize);
  940. /* Encode object */
  941. if (!recode_strings && PyString_Check(arg)) {
  942. s = arg;
  943. Py_INCREF(s);
  944. }
  945. else {
  946. #ifdef Py_USING_UNICODE
  947. PyObject *u;
  948. /* Convert object to Unicode */
  949. u = PyUnicode_FromObject(arg);
  950. if (u == NULL)
  951. return converterr(
  952. "string or unicode or text buffer",
  953. arg, msgbuf, bufsize);
  954. /* Encode object; use default error handling */
  955. s = PyUnicode_AsEncodedString(u,
  956. encoding,
  957. NULL);
  958. Py_DECREF(u);
  959. if (s == NULL)
  960. return converterr("(encoding failed)",
  961. arg, msgbuf, bufsize);
  962. if (!PyString_Check(s)) {
  963. Py_DECREF(s);
  964. return converterr(
  965. "(encoder failed to return a string)",
  966. arg, msgbuf, bufsize);
  967. }
  968. #else
  969. return converterr("string<e>", arg, msgbuf, bufsize);
  970. #endif
  971. }
  972. size = PyString_GET_SIZE(s);
  973. /* Write output; output is guaranteed to be 0-terminated */
  974. if (*format == '#') {
  975. /* Using buffer length parameter '#':
  976. - if *buffer is NULL, a new buffer of the
  977. needed size is allocated and the data
  978. copied into it; *buffer is updated to point
  979. to the new buffer; the caller is
  980. responsible for PyMem_Free()ing it after
  981. usage
  982. - if *buffer is not NULL, the data is
  983. copied to *buffer; *buffer_len has to be
  984. set to the size of the buffer on input;
  985. buffer overflow is signalled with an error;
  986. buffer has to provide enough room for the
  987. encoded string plus the trailing 0-byte
  988. - in both cases, *buffer_len is updated to
  989. the size of the buffer /excluding/ the
  990. trailing 0-byte
  991. */
  992. FETCH_SIZE;
  993. format++;
  994. if (q == NULL && q2 == NULL) {
  995. Py_DECREF(s);
  996. return converterr(
  997. "(buffer_len is NULL)",
  998. arg, msgbuf, bufsize);
  999. }
  1000. if (*buffer == NULL) {
  1001. *buffer = PyMem_NEW(char, size + 1);
  1002. if (*buffer == NULL) {
  1003. Py_DECREF(s);
  1004. return converterr(
  1005. "(memory error)",
  1006. arg, msgbuf, bufsize);
  1007. }
  1008. if (addcleanup(*buffer, freelist, cleanup_ptr)) {
  1009. Py_DECREF(s);
  1010. return converterr(
  1011. "(cleanup problem)",
  1012. arg, msgbuf, bufsize);
  1013. }
  1014. } else {
  1015. if (size + 1 > BUFFER_LEN) {
  1016. Py_DECREF(s);
  1017. return converterr(
  1018. "(buffer overflow)",
  1019. arg, msgbuf, bufsize);
  1020. }
  1021. }
  1022. memcpy(*buffer,
  1023. PyString_AS_STRING(s),
  1024. size + 1);
  1025. STORE_SIZE(size);
  1026. } else {
  1027. /* Using a 0-terminated buffer:
  1028. - the encoded string has to be 0-terminated
  1029. for this variant to work; if it is not, an
  1030. error raised
  1031. - a new buffer of the needed size is
  1032. allocated and the data copied into it;
  1033. *buffer is updated to point to the new
  1034. buffer; the caller is responsible for
  1035. PyMem_Free()ing it after usage
  1036. */
  1037. if ((Py_ssize_t)strlen(PyString_AS_STRING(s))
  1038. != size) {
  1039. Py_DECREF(s);
  1040. return converterr(
  1041. "encoded string without NULL bytes",
  1042. arg, msgbuf, bufsize);
  1043. }
  1044. *buffer = PyMem_NEW(char, size + 1);
  1045. if (*buffer == NULL) {
  1046. Py_DECREF(s);
  1047. return converterr("(memory error)",
  1048. arg, msgbuf, bufsize);
  1049. }
  1050. if (addcleanup(*buffer, freelist, cleanup_ptr)) {
  1051. Py_DECREF(s);
  1052. return converterr("(cleanup problem)",
  1053. arg, msgbuf, bufsize);
  1054. }
  1055. memcpy(*buffer,
  1056. PyString_AS_STRING(s),
  1057. size + 1);
  1058. }
  1059. Py_DECREF(s);
  1060. break;
  1061. }
  1062. #ifdef Py_USING_UNICODE
  1063. case 'u': {/* raw unicode buffer (Py_UNICODE *) */
  1064. if (*format == '#') { /* any buffer-like object */
  1065. void **p = (void **)va_arg(*p_va, char **);
  1066. FETCH_SIZE;
  1067. if (PyUnicode_Check(arg)) {
  1068. *p = PyUnicode_AS_UNICODE(arg);
  1069. STORE_SIZE(PyUnicode_GET_SIZE(arg));
  1070. }
  1071. else {
  1072. return converterr("cannot convert raw buffers",
  1073. arg, msgbuf, bufsize);
  1074. }
  1075. format++;
  1076. } else {
  1077. Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
  1078. if (PyUnicode_Check(arg))
  1079. *p = PyUnicode_AS_UNICODE(arg);
  1080. else
  1081. return converterr("unicode", arg, msgbuf, bufsize);
  1082. }
  1083. break;
  1084. }
  1085. #endif
  1086. case 'S': { /* string object */
  1087. PyObject **p = va_arg(*p_va, PyObject **);
  1088. if (PyString_Check(arg))
  1089. *p = arg;
  1090. else
  1091. return converterr("string", arg, msgbuf, bufsize);
  1092. break;
  1093. }
  1094. #ifdef Py_USING_UNICODE
  1095. case 'U': { /* Unicode object */
  1096. PyObject **p = va_arg(*p_va, PyObject **);
  1097. if (PyUnicode_Check(arg))
  1098. *p = arg;
  1099. else
  1100. return converterr("unicode", arg, msgbuf, bufsize);
  1101. break;
  1102. }
  1103. #endif
  1104. case 'O': { /* object */
  1105. PyTypeObject *type;
  1106. PyObject **p;
  1107. if (*format == '!') {
  1108. type = va_arg(*p_va, PyTypeObject*);
  1109. p = va_arg(*p_va, PyObject **);
  1110. format++;
  1111. if (PyType_IsSubtype(arg->ob_type, type))
  1112. *p = arg;
  1113. else
  1114. return converterr(type->tp_name, arg, msgbuf, bufsize);
  1115. }
  1116. else if (*format == '?') {
  1117. inquiry pred = va_arg(*p_va, inquiry);
  1118. p = va_arg(*p_va, PyObject **);
  1119. format++;
  1120. if ((*pred)(arg))
  1121. *p = arg;
  1122. else
  1123. return converterr("(unspecified)",
  1124. arg, msgbuf, bufsize);
  1125. }
  1126. else if (*format == '&') {
  1127. typedef int (*converter)(PyObject *, void *);
  1128. converter convert = va_arg(*p_va, converter);
  1129. void *addr = va_arg(*p_va, void *);
  1130. format++;
  1131. if (! (*convert)(arg, addr))
  1132. return converterr("(unspecified)",
  1133. arg, msgbuf, bufsize);
  1134. }
  1135. else {
  1136. p = va_arg(*p_va, PyObject **);
  1137. *p = arg;
  1138. }
  1139. break;
  1140. }
  1141. case 'w': { /* memory buffer, read-write access */
  1142. void **p = va_arg(*p_va, void **);
  1143. void *res;
  1144. PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
  1145. Py_ssize_t count;
  1146. if (pb && pb->bf_releasebuffer && *format != '*')
  1147. /* Buffer must be released, yet caller does not use
  1148. the Py_buffer protocol. */
  1149. return converterr("pinned buffer", arg, msgbuf, bufsize);
  1150. if (pb && pb->bf_getbuffer && *format == '*') {
  1151. /* Caller is interested in Py_buffer, and the object
  1152. supports it directly. */
  1153. format++;
  1154. if (pb->bf_getbuffer(arg, (Py_buffer*)p, PyBUF_WRITABLE) < 0) {
  1155. PyErr_Clear();
  1156. return converterr("read-write buffer", arg, msgbuf, bufsize);
  1157. }
  1158. if (addcleanup(p, freelist, cleanup_buffer)) {
  1159. return converterr(
  1160. "(cleanup problem)",
  1161. arg, msgbuf, bufsize);
  1162. }
  1163. if (!PyBuffer_IsContiguous((Py_buffer*)p, 'C'))
  1164. return converterr("contiguous buffer", arg, msgbuf, bufsize);
  1165. break;
  1166. }
  1167. if (pb == NULL ||
  1168. pb->bf_getwritebuffer == NULL ||
  1169. pb->bf_getsegcount == NULL)
  1170. return converterr("read-write buffer", arg, msgbuf, bufsize);
  1171. if ((*pb->bf_getsegcount)(arg, NULL) != 1)
  1172. return converterr("single-segment read-write buffer",
  1173. arg, msgbuf, bufsize);
  1174. if ((count = pb->bf_getwritebuffer(arg, 0, &res)) < 0)
  1175. return converterr("(unspecified)", arg, msgbuf, bufsize);
  1176. if (*format == '*') {
  1177. PyBuffer_FillInfo((Py_buffer*)p, arg, res, count, 1, 0);
  1178. format++;
  1179. }
  1180. else {
  1181. *p = res;
  1182. if (*format == '#') {
  1183. FETCH_SIZE;
  1184. STORE_SIZE(count);
  1185. format++;
  1186. }
  1187. }
  1188. break;
  1189. }
  1190. case 't': { /* 8-bit character buffer, read-only access */
  1191. char **p = va_arg(*p_va, char **);
  1192. PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
  1193. Py_ssize_t count;
  1194. if (*format++ != '#')
  1195. return converterr(
  1196. "invalid use of 't' format character",
  1197. arg, msgbuf, bufsize);
  1198. if (!PyType_HasFeature(arg->ob_type,
  1199. Py_TPFLAGS_HAVE_GETCHARBUFFER) ||
  1200. pb == NULL || pb->bf_getcharbuffer == NULL ||
  1201. pb->bf_getsegcount == NULL)
  1202. return converterr(
  1203. "string or read-only character buffer",
  1204. arg, msgbuf, bufsize);
  1205. if (pb->bf_getsegcount(arg, NULL) != 1)
  1206. return converterr(
  1207. "string or single-segment read-only buffer",
  1208. arg, msgbuf, bufsize);
  1209. if (pb->bf_releasebuffer)
  1210. return converterr(
  1211. "string or pinned buffer",
  1212. arg, msgbuf, bufsize);
  1213. count = pb->bf_getcharbuffer(arg, 0, p);
  1214. if (count < 0)
  1215. return converterr("(unspecified)", arg, msgbuf, bufsize);
  1216. {
  1217. FETCH_SIZE;
  1218. STORE_SIZE(count);
  1219. }
  1220. break;
  1221. }
  1222. default:
  1223. return converterr("impossible<bad format char>", arg, msgbuf, bufsize);
  1224. }
  1225. *p_format = format;
  1226. return NULL;
  1227. }
  1228. static Py_ssize_t
  1229. convertbuffer(PyObject *arg, void **p, char **errmsg)
  1230. {
  1231. PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
  1232. Py_ssize_t count;
  1233. if (pb == NULL ||
  1234. pb->bf_getreadbuffer == NULL ||
  1235. pb->bf_getsegcount == NULL ||
  1236. pb->bf_releasebuffer != NULL) {
  1237. *errmsg = "string or read-only buffer";
  1238. return -1;
  1239. }
  1240. if ((*pb->bf_getsegcount)(arg, NULL) != 1) {
  1241. *errmsg = "string or single-segment read-only buffer";
  1242. return -1;
  1243. }
  1244. if ((count = (*pb->bf_getreadbuffer)(arg, 0, p)) < 0) {
  1245. *errmsg = "(unspecified)";
  1246. }
  1247. return count;
  1248. }
  1249. static int
  1250. getbuffer(PyObject *arg, Py_buffer *view, char **errmsg)
  1251. {
  1252. void *buf;
  1253. Py_ssize_t count;
  1254. PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
  1255. if (pb == NULL) {
  1256. *errmsg = "string or buffer";
  1257. return -1;
  1258. }
  1259. if (pb->bf_getbuffer) {
  1260. if (pb->bf_getbuffer(arg, view, 0) < 0) {
  1261. *errmsg = "convertible to a buffer";
  1262. return -1;
  1263. }
  1264. if (!PyBuffer_IsContiguous(view, 'C')) {
  1265. *errmsg = "contiguous buffer";
  1266. return -1;
  1267. }
  1268. return 0;
  1269. }
  1270. count = convertbuffer(arg, &buf, errmsg);
  1271. if (count < 0) {
  1272. *errmsg = "convertible to a buffer";
  1273. return count;
  1274. }
  1275. PyBuffer_FillInfo(view, arg, buf, count, 1, 0);
  1276. return 0;
  1277. }
  1278. /* Support for keyword arguments donated by
  1279. Geoff Philbrick <philbric@delphi.hks.com> */
  1280. /* Return false (0) for error, else true. */
  1281. int
  1282. PyArg_ParseTupleAndKeywords(PyObject *args,
  1283. PyObject *keywords,
  1284. const char *format,
  1285. char **kwlist, ...)
  1286. {
  1287. int retval;
  1288. va_list va;
  1289. if ((args == NULL || !PyTuple_Check(args)) ||
  1290. (keywords != NULL && !PyDict_Check(keywords)) ||
  1291. format == NULL ||
  1292. kwlist == NULL)
  1293. {
  1294. PyErr_BadInternalCall();
  1295. return 0;
  1296. }
  1297. va_start(va, kwlist);
  1298. retval = vgetargskeywords(args, keywords, format, kwlist, &va, 0);
  1299. va_end(va);
  1300. return retval;
  1301. }
  1302. int
  1303. _PyArg_ParseTupleAndKeywords_SizeT(PyObject *args,
  1304. PyObject *keywords,
  1305. const char *format,
  1306. char **kwlist, ...)
  1307. {
  1308. int retval;
  1309. va_list va;
  1310. if ((args == NULL || !PyTuple_Check(args)) ||
  1311. (keywords != NULL && !PyDict_Check(keywords)) ||
  1312. format == NULL ||
  1313. kwlist == NULL)
  1314. {
  1315. PyErr_BadInternalCall();
  1316. return 0;
  1317. }
  1318. va_start(va, kwlist);
  1319. retval = vgetargskeywords(args, keywords, format,
  1320. kwlist, &va, FLAG_SIZE_T);
  1321. va_end(va);
  1322. return retval;
  1323. }
  1324. int
  1325. PyArg_VaParseTupleAndKeywords(PyObject *args,
  1326. PyObject *keywords,
  1327. const char *format,
  1328. char **kwlist, va_list va)
  1329. {
  1330. int retval;
  1331. va_list lva;
  1332. if ((args == NULL || !PyTuple_Check(args)) ||
  1333. (keywords != NULL && !PyDict_Check(keywords)) ||
  1334. format == NULL ||
  1335. kwlist == NULL)
  1336. {
  1337. PyErr_BadInternalCall();
  1338. return 0;
  1339. }
  1340. #ifdef VA_LIST_IS_ARRAY
  1341. memcpy(lva, va, sizeof(va_list));
  1342. #else
  1343. #ifdef __va_copy
  1344. __va_copy(lva, va);
  1345. #else
  1346. lva = va;
  1347. #endif
  1348. #endif
  1349. retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0);
  1350. return retval;
  1351. }
  1352. int
  1353. _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
  1354. PyObject *keywords,
  1355. const char *format,
  1356. char **kwlist, va_list va)
  1357. {
  1358. int retval;
  1359. va_list lva;
  1360. if ((args == NULL || !PyTuple_Check(args)) ||
  1361. (keywords != NULL && !PyDict_Check(keywords)) ||
  1362. format == NULL ||
  1363. kwlist == NULL)
  1364. {
  1365. PyErr_BadInternalCall();
  1366. return 0;
  1367. }
  1368. #ifdef VA_LIST_IS_ARRAY
  1369. memcpy(lva, va, sizeof(va_list));
  1370. #else
  1371. #ifdef __va_copy
  1372. __va_copy(lva, va);
  1373. #else
  1374. lva = va;
  1375. #endif
  1376. #endif
  1377. retval = vgetargskeywords(args, keywords, format,
  1378. kwlist, &lva, FLAG_SIZE_T);
  1379. return retval;
  1380. }
  1381. #define IS_END_OF_FORMAT(c) (c == '\0' || c == ';' || c == ':')
  1382. static int
  1383. vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
  1384. char **kwlist, va_list *p_va, int flags)
  1385. {
  1386. char msgbuf[512];
  1387. int levels[32];
  1388. const char *fname, *msg, *custom_msg, *keyword;
  1389. int min = INT_MAX;
  1390. int i, len, nargs, nkeywords;
  1391. PyObject *freelist = NULL, *current_arg;
  1392. assert(args != NULL && PyTuple_Check(args));
  1393. assert(keywords == NULL || PyDict_Check(keywords));
  1394. assert(format != NULL);
  1395. assert(kwlist != NULL);
  1396. assert(p_va != NULL);
  1397. /* grab the function name or custom error msg first (mutually exclusive) */
  1398. fname = strchr(format, ':');
  1399. if (fname) {
  1400. fname++;
  1401. custom_msg = NULL;
  1402. }
  1403. else {
  1404. custom_msg = strchr(format,';');
  1405. if (custom_msg)
  1406. custom_msg++;
  1407. }
  1408. /* scan kwlist and get greatest possible nbr of args */
  1409. for (len=0; kwlist[len]; len++)
  1410. continue;
  1411. nargs = PyTuple_GET_SIZE(args);
  1412. nkeywords = (keywords == NULL) ? 0 : PyDict_Size(keywords);
  1413. if (nargs + nkeywords > len) {
  1414. PyErr_Format(PyExc_TypeError, "%s%s takes at most %d "
  1415. "argument%s (%d given)",
  1416. (fname == NULL) ? "function" : fname,
  1417. (fname == NULL) ? "" : "()",
  1418. len,
  1419. (len == 1) ? "" : "s",
  1420. nargs + nkeywords);
  1421. return 0;
  1422. }
  1423. /* convert tuple args and keyword args in same loop, using kwlist to drive process */
  1424. for (i = 0; i < len; i++) {
  1425. keyword = kwlist[i];
  1426. if (*format == '|') {
  1427. min = i;
  1428. format++;
  1429. }
  1430. if (IS_END_OF_FORMAT(*format)) {
  1431. PyErr_Format(PyExc_RuntimeError,
  1432. "More keyword list entries (%d) than "
  1433. "format specifiers (%d)", len, i);
  1434. return cleanreturn(0, freelist);
  1435. }
  1436. current_arg = NULL;
  1437. if (nkeywords) {
  1438. current_arg = PyDict_GetItemString(keywords, keyword);
  1439. }
  1440. if (current_arg) {
  1441. --nkeywords;
  1442. if (i < nargs) {
  1443. /* arg present in tuple and in dict */
  1444. PyErr_Format(PyExc_TypeError,
  1445. "Argument given by name ('%s') "
  1446. "and position (%d)",
  1447. keyword, i+1);
  1448. return cleanreturn(0, freelist);
  1449. }
  1450. }
  1451. else if (nkeywords && PyErr_Occurred())
  1452. return cleanreturn(0, freelist);
  1453. else if (i < nargs)
  1454. current_arg = PyTuple_GET_ITEM(args, i);
  1455. if (current_arg) {
  1456. msg = convertitem(current_arg, &format, p_va, flags,
  1457. levels, msgbuf, sizeof(msgbuf), &freelist);
  1458. if (msg) {
  1459. seterror(i+1, msg, levels, fname, custom_msg);
  1460. return cleanreturn(0, freelist);
  1461. }
  1462. continue;
  1463. }
  1464. if (i < min) {
  1465. PyErr_Format(PyExc_TypeError, "Required argument "
  1466. "'%s' (pos %d) not found",
  1467. keyword, i+1);
  1468. return cleanreturn(0, freelist);
  1469. }
  1470. /* current code reports success when all required args
  1471. * fulfilled and no keyword args left, with no further
  1472. * validation. XXX Maybe skip this in debug build ?
  1473. */
  1474. if (!nkeywords)
  1475. return cleanreturn(1, freelist);
  1476. /* We are into optional args, skip thru to any remaining
  1477. * keyword args */
  1478. msg = skipitem(&format, p_va, flags);
  1479. if (msg) {
  1480. PyErr_Format(PyExc_RuntimeError, "%s: '%s'", msg,
  1481. format);
  1482. return cleanreturn(0, freelist);
  1483. }
  1484. }
  1485. if (!IS_END_OF_FORMAT(*format) && *format != '|') {
  1486. PyErr_Format(PyExc_RuntimeError,
  1487. "more argument specifiers than keyword list entries "
  1488. "(remaining format:'%s')", format);
  1489. return cleanreturn(0, freelist);
  1490. }
  1491. /* make sure there are no extraneous keyword arguments */
  1492. if (nkeywords > 0) {
  1493. PyObject *key, *value;
  1494. Py_ssize_t pos = 0;
  1495. while (PyDict_Next(keywords, &pos, &key, &value)) {
  1496. int match = 0;
  1497. char *ks;
  1498. if (!PyString_Check(key)) {
  1499. PyErr_SetString(PyExc_TypeError,
  1500. "keywords must be strings");
  1501. return cleanreturn(0, freelist);
  1502. }
  1503. ks = PyString_AsString(key);
  1504. for (i = 0; i < len; i++) {
  1505. if (!strcmp(ks, kwlist[i])) {
  1506. match = 1;
  1507. break;
  1508. }
  1509. }
  1510. if (!match) {
  1511. PyErr_Format(PyExc_TypeError,
  1512. "'%s' is an invalid keyword "
  1513. "argument for this function",
  1514. ks);
  1515. return cleanreturn(0, freelist);
  1516. }
  1517. }
  1518. }
  1519. return cleanreturn(1, freelist);
  1520. }
  1521. static char *
  1522. skipitem(const char **p_format, va_list *p_va, int flags)
  1523. {
  1524. const char *format = *p_format;
  1525. char c = *format++;
  1526. switch (c) {
  1527. /* simple codes
  1528. * The individual types (second arg of va_arg) are irrelevant */
  1529. case 'b': /* byte -- very short int */
  1530. case 'B': /* byte as bitfield */
  1531. case 'h': /* short int */
  1532. case 'H': /* short int as bitfield */
  1533. case 'i': /* int */
  1534. case 'I': /* int sized bitfield */
  1535. case 'l': /* long int */
  1536. case 'k': /* long int sized bitfield */
  1537. #ifdef HAVE_LONG_LONG
  1538. case 'L': /* PY_LONG_LONG */
  1539. case 'K': /* PY_LONG_LONG sized bitfield */
  1540. #endif
  1541. case 'f': /* float */
  1542. case 'd': /* double */
  1543. #ifndef WITHOUT_COMPLEX
  1544. case 'D': /* complex double */
  1545. #endif
  1546. case 'c': /* char */
  1547. {
  1548. (void) va_arg(*p_va, void *);
  1549. break;
  1550. }
  1551. case 'n': /* Py_ssize_t */
  1552. {
  1553. (void) va_arg(*p_va, Py_ssize_t *);
  1554. break;
  1555. }
  1556. /* string codes */
  1557. case 'e': /* string with encoding */
  1558. {
  1559. (void) va_arg(*p_va, const char *);
  1560. if (!(*format == 's' || *format == 't'))
  1561. /* after 'e', only 's' and 't' is allowed */
  1562. goto err;
  1563. format++;
  1564. /* explicit fallthrough to string cases */
  1565. }
  1566. case 's': /* string */
  1567. case 'z': /* string or None */
  1568. #ifdef Py_USING_UNICODE
  1569. case 'u': /* unicode string */
  1570. #endif
  1571. case 't': /* buffer, read-only */
  1572. case 'w': /* buffer, read-write */
  1573. {
  1574. (void) va_arg(*p_va, char **);
  1575. if (*format == '#') {
  1576. if (flags & FLAG_SIZE_T)
  1577. (void) va_arg(*p_va, Py_ssize_t *);
  1578. else
  1579. (void) va_arg(*p_va, int *);
  1580. format++;
  1581. } else if ((c == 's' || c == 'z') && *format == '*') {
  1582. format++;
  1583. }
  1584. break;
  1585. }
  1586. /* object codes */
  1587. case 'S': /* string object */
  1588. #ifdef Py_USING_UNICODE
  1589. case 'U': /* unicode string object */
  1590. #endif
  1591. {
  1592. (void) va_arg(*p_va, PyObject **);
  1593. break;
  1594. }
  1595. case 'O': /* object */
  1596. {
  1597. if (*format == '!') {
  1598. format++;
  1599. (void) va_arg(*p_va, PyTypeObject*);
  1600. (void) va_arg(*p_va, PyObject **);
  1601. }
  1602. else if (*format == '&') {
  1603. typedef int (*converter)(PyObject *, void *);
  1604. (void) va_arg(*p_va, converter);
  1605. (void) va_arg(*p_va, void *);
  1606. format++;
  1607. }
  1608. else {
  1609. (void) va_arg(*p_va, PyObject **);
  1610. }
  1611. break;
  1612. }
  1613. case '(': /* bypass tuple, not handled at all previously */
  1614. {
  1615. char *msg;
  1616. for (;;) {
  1617. if (*format==')')
  1618. break;
  1619. if (IS_END_OF_FORMAT(*format))
  1620. return "Unmatched left paren in format "
  1621. "string";
  1622. msg = skipitem(&format, p_va, flags);
  1623. if (msg)
  1624. return msg;
  1625. }
  1626. format++;
  1627. break;
  1628. }
  1629. case ')':
  1630. return "Unmatched right paren in format string";
  1631. default:
  1632. err:
  1633. return "impossible<bad format char>";
  1634. }
  1635. *p_format = format;
  1636. return NULL;
  1637. }
  1638. int
  1639. PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...)
  1640. {
  1641. Py_ssize_t i, l;
  1642. PyObject **o;
  1643. va_list vargs;
  1644. #ifdef HAVE_STDARG_PROTOTYPES
  1645. va_start(vargs, max);
  1646. #else
  1647. va_start(vargs);
  1648. #endif
  1649. assert(min >= 0);
  1650. assert(min <= max);
  1651. if (!PyTuple_Check(args)) {
  1652. PyErr_SetString(PyExc_SystemError,
  1653. "PyArg_UnpackTuple() argument list is not a tuple");
  1654. return 0;
  1655. }
  1656. l = PyTuple_GET_SIZE(args);
  1657. if (l < min) {
  1658. if (name != NULL)
  1659. PyErr_Format(
  1660. PyExc_TypeError,
  1661. "%s expected %s%zd arguments, got %zd",
  1662. name, (min == max ? "" : "at least "), min, l);
  1663. else
  1664. PyErr_Format(
  1665. PyExc_TypeError,
  1666. "unpacked tuple should have %s%zd elements,"
  1667. " but has %zd",
  1668. (min == max ? "" : "at least "), min, l);
  1669. va_end(vargs);
  1670. return 0;
  1671. }
  1672. if (l > max) {
  1673. if (name != NULL)
  1674. PyErr_Format(
  1675. PyExc_TypeError,
  1676. "%s expected %s%zd arguments, got %zd",
  1677. name, (min == max ? "" : "at most "), max, l);
  1678. else
  1679. PyErr_Format(
  1680. PyExc_TypeError,
  1681. "unpacked tuple should have %s%zd elements,"
  1682. " but has %zd",
  1683. (min == max ? "" : "at most "), max, l);
  1684. va_end(vargs);
  1685. return 0;
  1686. }
  1687. for (i = 0; i < l; i++) {
  1688. o = va_arg(vargs, PyObject **);
  1689. *o = PyTuple_GET_ITEM(args, i);
  1690. }
  1691. va_end(vargs);
  1692. return 1;
  1693. }
  1694. /* For type constructors that don't take keyword args
  1695. *
  1696. * Sets a TypeError and returns 0 if the kwds dict is
  1697. * not empty, returns 1 otherwise
  1698. */
  1699. int
  1700. _PyArg_NoKeywords(const char *funcname, PyObject *kw)
  1701. {
  1702. if (kw == NULL)
  1703. return 1;
  1704. if (!PyDict_CheckExact(kw)) {
  1705. PyErr_BadInternalCall();
  1706. return 0;
  1707. }
  1708. if (PyDict_Size(kw) == 0)
  1709. return 1;
  1710. PyErr_Format(PyExc_TypeError, "%s does not take keyword arguments",
  1711. funcname);
  1712. return 0;
  1713. }
  1714. #ifdef __cplusplus
  1715. };
  1716. #endif