zend_func_info.c 118 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Zend Engine, Func Info |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1998-2018 The PHP Group |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 3.01 of the PHP license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.php.net/license/3_01.txt |
  11. | If you did not receive a copy of the PHP license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@php.net so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | Authors: Dmitry Stogov <dmitry@php.net> |
  16. | Xinchen Hui <laruence@php.net> |
  17. +----------------------------------------------------------------------+
  18. */
  19. #include "php.h"
  20. #include "zend_compile.h"
  21. #include "zend_extensions.h"
  22. #include "zend_ssa.h"
  23. #include "zend_optimizer_internal.h"
  24. #include "zend_inference.h"
  25. #include "zend_call_graph.h"
  26. #include "zend_func_info.h"
  27. #include "zend_inference.h"
  28. #ifdef _WIN32
  29. #include "win32/ioutil.h"
  30. #endif
  31. typedef uint32_t (*info_func_t)(const zend_call_info *call_info, const zend_ssa *ssa);
  32. typedef struct _func_info_t {
  33. const char *name;
  34. int name_len;
  35. uint32_t info;
  36. info_func_t info_func;
  37. } func_info_t;
  38. /* MSVC defines its own IN macro, undefine it here */
  39. #undef IN
  40. #define F0(name, info) \
  41. {name, sizeof(name)-1, (FUNC_MAY_WARN | (info)), NULL}
  42. #define F1(name, info) \
  43. {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | (info)), NULL}
  44. #define FN(name, info) \
  45. {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
  46. #define FR(name, info) \
  47. {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_REF | (info)), NULL}
  48. #define FX(name, info) \
  49. {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | (info)), NULL}
  50. #define I0(name, info) \
  51. {name, sizeof(name)-1, (info), NULL}
  52. #define I1(name, info) \
  53. {name, sizeof(name)-1, (MAY_BE_RC1 | (info)), NULL}
  54. #define IN(name, info) \
  55. {name, sizeof(name)-1, (MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
  56. #define FC(name, callback) \
  57. {name, sizeof(name)-1, 0, callback}
  58. static uint32_t zend_strlen_info(const zend_call_info *call_info, const zend_ssa *ssa)
  59. {
  60. if (call_info->num_args == 1) {
  61. uint32_t tmp = 0;
  62. if (call_info->arg_info[0].opline) {
  63. uint32_t arg_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
  64. if (arg_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
  65. tmp |= MAY_BE_LONG;
  66. }
  67. if (arg_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
  68. /* warning, and returns NULL */
  69. tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
  70. }
  71. } else {
  72. tmp |= MAY_BE_LONG | FUNC_MAY_WARN | MAY_BE_NULL;
  73. }
  74. return tmp;
  75. } else if (call_info->num_args != -1) {
  76. /* warning, and returns NULL */
  77. return FUNC_MAY_WARN | MAY_BE_NULL;
  78. } else {
  79. return MAY_BE_LONG | FUNC_MAY_WARN | MAY_BE_NULL;
  80. }
  81. }
  82. static uint32_t zend_dechex_info(const zend_call_info *call_info, const zend_ssa *ssa)
  83. {
  84. if (call_info->num_args == 1) {
  85. return MAY_BE_RC1 | MAY_BE_STRING;
  86. } else if (call_info->num_args != -1) {
  87. /* warning, and returns NULL */
  88. return FUNC_MAY_WARN | MAY_BE_NULL;
  89. } else {
  90. return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_STRING | MAY_BE_NULL;
  91. }
  92. }
  93. static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa *ssa)
  94. {
  95. if (call_info->num_args == 2 || call_info->num_args == 3) {
  96. uint32_t t1 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
  97. uint32_t t2 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
  98. uint32_t t3 = 0;
  99. uint32_t tmp = FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG;
  100. if (call_info->num_args == 3) {
  101. t3 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
  102. }
  103. if ((t1 & MAY_BE_STRING) && (t2 & MAY_BE_STRING)) {
  104. tmp |= MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
  105. }
  106. if ((t1 & (MAY_BE_DOUBLE|MAY_BE_STRING))
  107. || (t2 & (MAY_BE_DOUBLE|MAY_BE_STRING))
  108. || (t3 & (MAY_BE_DOUBLE|MAY_BE_STRING))) {
  109. tmp |= MAY_BE_ARRAY_OF_DOUBLE;
  110. }
  111. if ((t1 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE))) && (t2 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE)))) {
  112. if ((t3 & MAY_BE_ANY) != MAY_BE_DOUBLE) {
  113. tmp |= MAY_BE_ARRAY_OF_LONG;
  114. }
  115. }
  116. return tmp;
  117. } else {
  118. /* may warning, and return FALSE */
  119. return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
  120. }
  121. }
  122. static uint32_t zend_is_type_info(const zend_call_info *call_info, const zend_ssa *ssa)
  123. {
  124. if (call_info->num_args == 1) {
  125. return MAY_BE_FALSE | MAY_BE_TRUE;
  126. } else {
  127. return MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_WARN;
  128. }
  129. }
  130. static uint32_t zend_l_ss_info(const zend_call_info *call_info, const zend_ssa *ssa)
  131. {
  132. if (call_info->num_args == 2) {
  133. uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
  134. uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
  135. uint32_t tmp = 0;
  136. if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
  137. (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
  138. tmp |= MAY_BE_LONG;
  139. }
  140. if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
  141. (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
  142. /* warning, and returns NULL */
  143. tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
  144. }
  145. return tmp;
  146. } else {
  147. /* warning, and returns NULL */
  148. return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
  149. }
  150. }
  151. static uint32_t zend_lb_ssn_info(const zend_call_info *call_info, const zend_ssa *ssa)
  152. {
  153. if (call_info->num_args == 3) {
  154. uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
  155. uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
  156. uint32_t arg3_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
  157. uint32_t tmp = 0;
  158. if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
  159. (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
  160. (arg3_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
  161. tmp |= MAY_BE_LONG | MAY_BE_FALSE;
  162. }
  163. if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
  164. (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
  165. (arg3_info & (MAY_BE_STRING|MAY_BE_RESOURCE|MAY_BE_ARRAY|MAY_BE_OBJECT))) {
  166. /* warning, and returns NULL */
  167. tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
  168. }
  169. return tmp;
  170. } else {
  171. /* warning, and returns NULL */
  172. return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
  173. }
  174. }
  175. static uint32_t zend_b_s_info(const zend_call_info *call_info, const zend_ssa *ssa)
  176. {
  177. if (call_info->num_args == 1) {
  178. uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
  179. uint32_t tmp = 0;
  180. if (arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
  181. tmp |= MAY_BE_FALSE | MAY_BE_TRUE;
  182. }
  183. if (arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
  184. /* warning, and returns NULL */
  185. tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
  186. }
  187. return tmp;
  188. } else {
  189. /* warning, and returns NULL */
  190. return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE;
  191. }
  192. }
  193. #define UNKNOWN_INFO (MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF)
  194. static const func_info_t func_infos[] = {
  195. /* zend */
  196. I1("zend_version", MAY_BE_STRING),
  197. I0("gc_collect_cycles", MAY_BE_LONG),
  198. I0("gc_enabled", MAY_BE_FALSE | MAY_BE_TRUE),
  199. F0("gc_enable", MAY_BE_NULL),
  200. F0("gc_disable", MAY_BE_NULL),
  201. F0("func_num_args", MAY_BE_LONG),
  202. FN("func_get_arg", UNKNOWN_INFO),
  203. F1("func_get_args", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
  204. FC("strlen", zend_strlen_info),
  205. FC("strcmp", zend_l_ss_info),
  206. FC("strncmp", zend_lb_ssn_info),
  207. FC("strcasecmp", zend_l_ss_info),
  208. FC("strncasecmp", zend_lb_ssn_info),
  209. F1("each", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_KEY_ANY),
  210. F0("error_reporting", MAY_BE_NULL | MAY_BE_LONG),
  211. F0("define", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_NULL), // TODO: inline
  212. FC("defined", zend_b_s_info), // TODO: inline
  213. FN("get_class", MAY_BE_FALSE | MAY_BE_STRING),
  214. FN("get_called_class", MAY_BE_FALSE | MAY_BE_STRING),
  215. FN("get_parrent_class", MAY_BE_FALSE | MAY_BE_STRING),
  216. F0("is_subclass_of", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline
  217. F0("is_a", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline
  218. F1("get_class_vars", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
  219. FN("get_object_vars", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
  220. F1("get_class_methods", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  221. F0("method_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  222. F0("property_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  223. F0("class_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  224. F0("interface_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  225. F0("trait_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  226. FC("function_exists", zend_b_s_info), // TODO: inline
  227. F0("class_alias", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  228. I1("get_included_files", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  229. F0("trigger_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  230. F0("user_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  231. FN("set_error_handler", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_OBJECT | MAY_BE_OBJECT),
  232. I0("restore_error_handler", MAY_BE_TRUE),
  233. I0("restore_exception_handler", MAY_BE_TRUE),
  234. I1("get_declared_traits", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  235. I1("get_declared_classes", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  236. I1("get_declared_interfaces", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  237. F1("get_defined_functions", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
  238. I1("get_defined_vars", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
  239. FN("create_function", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  240. F1("get_resource_type", MAY_BE_NULL | MAY_BE_STRING),
  241. F1("get_defined_constants", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_RESOURCE | MAY_BE_ARRAY_OF_ARRAY),
  242. F0("debug_print_backtrace", MAY_BE_NULL),
  243. F1("debug_backtrace", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
  244. F1("get_loaded_extensions", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  245. FC("extension_loaded", zend_b_s_info),
  246. F1("get_extension_funcs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  247. /* ext/standard */
  248. FN("constant", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING | MAY_BE_RESOURCE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  249. F1("bin2hex", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  250. F1("hex2bin", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  251. F0("sleep", MAY_BE_FALSE | MAY_BE_LONG),
  252. F0("usleep", MAY_BE_NULL | MAY_BE_FALSE),
  253. #if HAVE_NANOSLEEP
  254. F0("time_nanosleep", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
  255. F0("time_sleep_until", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  256. #endif
  257. #if HAVE_STRPTIME
  258. F1("strptime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  259. #endif
  260. F0("flush", MAY_BE_NULL),
  261. F1("wordwrap", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  262. F1("htmlspecialchars", MAY_BE_NULL | MAY_BE_STRING),
  263. F1("htmlentities", MAY_BE_NULL | MAY_BE_STRING),
  264. FN("html_entity_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  265. FN("htmlspecialchars_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  266. F1("get_html_translation_table", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  267. F1("sha1", MAY_BE_NULL | MAY_BE_STRING),
  268. F1("sha1_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  269. F1("md5", MAY_BE_NULL | MAY_BE_STRING),
  270. F1("md5_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  271. F0("crc32", MAY_BE_NULL | MAY_BE_LONG),
  272. F1("iptcparse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
  273. F1("iptcembed", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  274. F1("getimagesize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  275. F1("getimagesizefromstring", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  276. F1("image_type_to_mime_type", MAY_BE_NULL | MAY_BE_STRING),
  277. F1("image_type_to_extension", MAY_BE_FALSE | MAY_BE_STRING),
  278. F0("phpinfo", MAY_BE_NULL | MAY_BE_TRUE),
  279. F1("phpversion", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  280. F0("phpcredits", MAY_BE_NULL | MAY_BE_TRUE),
  281. I1("php_sapi_name", MAY_BE_FALSE | MAY_BE_STRING),
  282. F1("php_uname", MAY_BE_NULL | MAY_BE_STRING),
  283. I1("php_ini_scanned_files", MAY_BE_FALSE | MAY_BE_STRING),
  284. I1("php_ini_loaded_file", MAY_BE_FALSE | MAY_BE_STRING),
  285. F0("strnatcmp", MAY_BE_NULL | MAY_BE_LONG),
  286. F0("strnatcasecmp", MAY_BE_NULL | MAY_BE_LONG),
  287. F0("substr_count", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  288. F0("strspn", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  289. F0("strcspn", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  290. F1("strtok", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  291. FN("strtoupper", MAY_BE_NULL | MAY_BE_STRING),
  292. FN("strtolower", MAY_BE_NULL | MAY_BE_STRING),
  293. F0("strpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  294. F0("stripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  295. F0("strrpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  296. F0("strripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  297. F1("strrev", MAY_BE_NULL | MAY_BE_STRING),
  298. F1("hebrev", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  299. F1("hebrevc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  300. F1("nl2br", MAY_BE_NULL | MAY_BE_STRING),
  301. F1("basename", MAY_BE_NULL | MAY_BE_STRING),
  302. F1("dirname", MAY_BE_NULL | MAY_BE_STRING),
  303. F1("pathinfo", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  304. F1("stripslashes", MAY_BE_NULL | MAY_BE_STRING),
  305. F1("stripcslashes", MAY_BE_NULL | MAY_BE_STRING),
  306. F1("strstr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  307. F1("stristr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  308. F1("strrchr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  309. F1("str_shuffle", MAY_BE_NULL | MAY_BE_STRING),
  310. F1("str_word_count", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  311. F1("str_split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  312. F1("strpbrk", MAY_BE_FALSE | MAY_BE_STRING),
  313. F0("substr_compare", MAY_BE_FALSE | MAY_BE_LONG),
  314. #ifdef HAVE_STRCOLL
  315. F0("strcoll", MAY_BE_NULL | MAY_BE_LONG),
  316. #endif
  317. #ifdef HAVE_STRFMON
  318. F1("money_format", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  319. #endif
  320. FN("substr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  321. FN("substr_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
  322. F1("quotemeta", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  323. FN("ucfirst", MAY_BE_NULL | MAY_BE_STRING),
  324. FN("lcfirst", MAY_BE_NULL | MAY_BE_STRING),
  325. F1("ucwords", MAY_BE_NULL | MAY_BE_STRING),
  326. FN("strtr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  327. FN("addslashes", MAY_BE_NULL | MAY_BE_STRING),
  328. F1("addcslashes", MAY_BE_NULL | MAY_BE_STRING),
  329. FN("rtrim", MAY_BE_NULL | MAY_BE_STRING),
  330. FN("str_replace", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY | MAY_BE_ARRAY_OF_OBJECT),
  331. FN("str_ireplace", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY | MAY_BE_ARRAY_OF_OBJECT),
  332. F1("str_repeat", MAY_BE_NULL | MAY_BE_STRING),
  333. F1("count_chars", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  334. F1("chunk_split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  335. FN("trim", MAY_BE_NULL | MAY_BE_STRING),
  336. FN("ltrim", MAY_BE_NULL | MAY_BE_STRING),
  337. F1("strip_tags", MAY_BE_NULL | MAY_BE_STRING),
  338. F0("similar_text", MAY_BE_NULL | MAY_BE_LONG),
  339. F1("explode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  340. FN("implode", MAY_BE_NULL | MAY_BE_STRING),
  341. FN("join", MAY_BE_NULL | MAY_BE_STRING),
  342. FN("setlocale", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  343. F1("localeconv", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  344. #if HAVE_NL_LANGINFO
  345. F1("nl_langinfo", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  346. #endif
  347. F1("soundex", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  348. F0("levenshtein", MAY_BE_NULL | MAY_BE_LONG),
  349. F1("chr", MAY_BE_NULL | MAY_BE_STRING),
  350. F0("ord", MAY_BE_NULL | MAY_BE_LONG),
  351. F0("parse_str", MAY_BE_NULL),
  352. F1("str_getcsv", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
  353. F1("str_pad", MAY_BE_NULL | MAY_BE_STRING),
  354. F1("chop", MAY_BE_NULL | MAY_BE_STRING),
  355. F1("strchr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  356. F1("sprintf", MAY_BE_FALSE | MAY_BE_STRING),
  357. F0("printf", MAY_BE_FALSE | MAY_BE_LONG),
  358. F0("vprintf", MAY_BE_FALSE | MAY_BE_LONG),
  359. F1("vsprintf", MAY_BE_FALSE | MAY_BE_STRING),
  360. F0("fprintf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  361. F0("vfprintf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  362. F1("sscanf", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
  363. F1("fscanf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
  364. F1("parse_url", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_LONG),
  365. F1("urlencode", MAY_BE_NULL | MAY_BE_STRING),
  366. F1("urldecode", MAY_BE_NULL | MAY_BE_STRING),
  367. F1("rawurlencode", MAY_BE_NULL | MAY_BE_STRING),
  368. F1("rawurldecode", MAY_BE_NULL | MAY_BE_STRING),
  369. F1("http_build_query", MAY_BE_FALSE | MAY_BE_STRING),
  370. #if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
  371. F1("readlink", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  372. F0("linkinfo", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  373. F0("symlink", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  374. F0("link", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  375. #endif
  376. F0("unlink", MAY_BE_FALSE | MAY_BE_TRUE),
  377. F1("exec", MAY_BE_FALSE | MAY_BE_STRING),
  378. F1("system", MAY_BE_FALSE | MAY_BE_STRING),
  379. F1("escapeshellcmd", MAY_BE_NULL | MAY_BE_STRING),
  380. F1("escapeshellarg", MAY_BE_NULL | MAY_BE_STRING),
  381. F1("passthru", MAY_BE_NULL | MAY_BE_FALSE),
  382. F1("shell_exec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  383. #ifdef PHP_CAN_SUPPORT_PROC_OPEN
  384. F1("proc_open", MAY_BE_FALSE | MAY_BE_RESOURCE),
  385. F0("proc_close", MAY_BE_FALSE | MAY_BE_LONG),
  386. F0("proc_terminate", MAY_BE_FALSE | MAY_BE_TRUE),
  387. F1("proc_get_status", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  388. #endif
  389. #ifdef HAVE_NICE
  390. F0("proc_nice", MAY_BE_FALSE | MAY_BE_TRUE),
  391. #endif
  392. F0("rand", MAY_BE_NULL | MAY_BE_LONG),
  393. F0("srand", MAY_BE_NULL),
  394. F0("getrandmax", MAY_BE_NULL | MAY_BE_LONG),
  395. F0("mt_rand", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  396. F0("mt_srand", MAY_BE_NULL),
  397. I0("mt_getrandmax", MAY_BE_LONG),
  398. #if HAVE_GETSERVBYNAME
  399. F0("getservbyname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  400. #endif
  401. #if HAVE_GETSERVBYPORT
  402. F1("getservbyport", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  403. #endif
  404. #if HAVE_GETPROTOBYNAME
  405. F0("getprotobyname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  406. #endif
  407. #if HAVE_GETPROTOBYNUMBER
  408. F1("getprotobynumber", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  409. #endif
  410. F0("getmyuid", MAY_BE_FALSE | MAY_BE_LONG),
  411. F0("getmygid", MAY_BE_FALSE | MAY_BE_LONG),
  412. F0("getmypid", MAY_BE_FALSE | MAY_BE_LONG),
  413. F0("getmyinode", MAY_BE_FALSE | MAY_BE_LONG),
  414. F0("getlastmod", MAY_BE_FALSE | MAY_BE_LONG),
  415. F1("base64_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  416. F1("base64_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  417. F1("password_hash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  418. F1("password_get_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  419. F0("password_needs_rehash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  420. F0("password_verify", MAY_BE_FALSE | MAY_BE_TRUE),
  421. F1("convert_uuencode", MAY_BE_FALSE | MAY_BE_STRING),
  422. F1("convert_uudecode", MAY_BE_FALSE | MAY_BE_STRING),
  423. F0("abs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
  424. F0("ceil", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  425. F0("floor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  426. F0("round", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  427. F0("sin", MAY_BE_NULL | MAY_BE_DOUBLE),
  428. F0("cos", MAY_BE_NULL | MAY_BE_DOUBLE),
  429. F0("tan", MAY_BE_NULL | MAY_BE_DOUBLE),
  430. F0("asin", MAY_BE_NULL | MAY_BE_DOUBLE),
  431. F0("acos", MAY_BE_NULL | MAY_BE_DOUBLE),
  432. F0("atan", MAY_BE_NULL | MAY_BE_DOUBLE),
  433. F0("atanh", MAY_BE_NULL | MAY_BE_DOUBLE),
  434. F0("atan2", MAY_BE_NULL | MAY_BE_DOUBLE),
  435. F0("sinh", MAY_BE_NULL | MAY_BE_DOUBLE),
  436. F0("cosh", MAY_BE_NULL | MAY_BE_DOUBLE),
  437. F0("tanh", MAY_BE_NULL | MAY_BE_DOUBLE),
  438. F0("asinh", MAY_BE_NULL | MAY_BE_DOUBLE),
  439. F0("acosh", MAY_BE_NULL | MAY_BE_DOUBLE),
  440. F0("expm1", MAY_BE_NULL | MAY_BE_DOUBLE),
  441. F0("log1p", MAY_BE_NULL | MAY_BE_DOUBLE),
  442. F0("pi", MAY_BE_DOUBLE),
  443. F0("is_finite", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  444. F0("is_nan", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  445. F0("is_infinite", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  446. F0("pow", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
  447. F0("exp", MAY_BE_NULL | MAY_BE_DOUBLE),
  448. F0("log", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  449. F0("log10", MAY_BE_NULL | MAY_BE_DOUBLE),
  450. F0("sqrt", MAY_BE_NULL | MAY_BE_DOUBLE),
  451. F0("hypot", MAY_BE_NULL | MAY_BE_DOUBLE),
  452. F0("deg2rad", MAY_BE_NULL | MAY_BE_DOUBLE),
  453. F0("rad2deg", MAY_BE_NULL | MAY_BE_DOUBLE),
  454. F0("bindec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
  455. F0("hexdec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
  456. F0("octdec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
  457. F1("decbin", MAY_BE_NULL | MAY_BE_STRING),
  458. F1("decoct", MAY_BE_NULL | MAY_BE_STRING),
  459. FC("dechex", zend_dechex_info),
  460. F1("base_convert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  461. F1("number_format", MAY_BE_NULL | MAY_BE_STRING),
  462. F0("fmod", MAY_BE_NULL | MAY_BE_DOUBLE),
  463. #ifdef HAVE_INET_NTOP
  464. F1("inet_ntop", MAY_BE_FALSE | MAY_BE_STRING),
  465. #endif
  466. #ifdef HAVE_INET_PTON
  467. F1("inet_pton", MAY_BE_FALSE | MAY_BE_STRING),
  468. #endif
  469. F0("ip2long", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  470. F1("long2ip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  471. F1("getenv", MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  472. #ifdef HAVE_PUTENV
  473. F0("putenv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  474. #endif
  475. F1("getopt", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  476. #ifdef HAVE_GETLOADAVG
  477. F1("sys_getloadavg", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
  478. #endif
  479. #ifdef HAVE_GETTIMEOFDAY
  480. F1("microtime", MAY_BE_NULL | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_STRING),
  481. F1("gettimeofday", MAY_BE_NULL | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_STRING),
  482. #endif
  483. #ifdef HAVE_GETRUSAGE
  484. F1("getrusage", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
  485. #endif
  486. #ifdef HAVE_GETTIMEOFDAY
  487. F1("uniqid", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  488. #endif
  489. F1("quoted_printable_decode", MAY_BE_NULL | MAY_BE_STRING),
  490. F1("quoted_printable_encode", MAY_BE_NULL | MAY_BE_STRING),
  491. F1("convert_cyr_string", MAY_BE_NULL | MAY_BE_STRING),
  492. I1("get_current_user", MAY_BE_STRING),
  493. F0("set_time_limit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  494. F0("header_register_callback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  495. F1("get_cfg_var", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  496. I0("magic_quotes_runtime", MAY_BE_FALSE),
  497. I0("set_magic_quotes_runtime", MAY_BE_FALSE),
  498. I0("get_magic_quotes_gpc", MAY_BE_FALSE),
  499. I0("get_magic_quotes_runtime", MAY_BE_FALSE),
  500. F0("error_log", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  501. I1("error_get_last", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  502. FN("call_user_func", UNKNOWN_INFO),
  503. FN("call_user_func_array", UNKNOWN_INFO),
  504. FN("call_user_method", UNKNOWN_INFO),
  505. FN("call_user_method_array", UNKNOWN_INFO),
  506. FN("forward_static_call", UNKNOWN_INFO),
  507. FN("forward_static_call_array", UNKNOWN_INFO),
  508. F1("serialize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  509. FN("unserialize", UNKNOWN_INFO),
  510. F0("var_dump", MAY_BE_NULL),
  511. F1("var_export", MAY_BE_NULL | MAY_BE_STRING),
  512. F0("debug_zval_dump", MAY_BE_NULL),
  513. F1("print_r", MAY_BE_TRUE | MAY_BE_STRING),
  514. F0("memory_get_usage", MAY_BE_FALSE | MAY_BE_LONG),
  515. F0("memory_get_peak_usage", MAY_BE_FALSE | MAY_BE_LONG),
  516. F0("register_shutdown_function", MAY_BE_NULL | MAY_BE_FALSE),
  517. F0("register_tick_function", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  518. F0("unregister_tick_function", MAY_BE_NULL),
  519. F1("highlight_file", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  520. F1("show_source", MAY_BE_FALSE | MAY_BE_STRING),
  521. F1("highlight_string", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  522. F1("php_strip_whitespace", MAY_BE_FALSE | MAY_BE_STRING),
  523. FN("ini_get", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  524. F1("ini_get_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  525. FN("ini_set", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  526. F1("ini_alter", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  527. F0("ini_restore", MAY_BE_NULL),
  528. I1("get_include_path", MAY_BE_FALSE | MAY_BE_STRING),
  529. F1("set_include_path", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  530. F0("restore_include_path", MAY_BE_NULL),
  531. F0("setcookie", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  532. F0("setrawcookie", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  533. F0("header", MAY_BE_NULL),
  534. F0("header_remove", MAY_BE_NULL),
  535. F0("headers_sent", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  536. F1("headers_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  537. F0("http_response_code", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  538. F0("connection_aborted", MAY_BE_LONG),
  539. F0("connection_status", MAY_BE_LONG),
  540. F0("ignore_user_abort", MAY_BE_NULL | MAY_BE_LONG),
  541. F1("parse_ini_file", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  542. F1("parse_ini_string", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  543. #if ZEND_DEBUG
  544. F1("config_get_hash", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  545. #endif
  546. F0("is_uploaded_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  547. F0("move_uploaded_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  548. F1("gethostbyaddr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  549. F1("gethostbyname", MAY_BE_NULL | MAY_BE_STRING),
  550. F1("gethostbynamel", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  551. #ifdef HAVE_GETHOSTNAME
  552. F1("gethostname", MAY_BE_FALSE | MAY_BE_STRING),
  553. #endif
  554. #if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
  555. F0("dns_check_record", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  556. F0("checkdnsrr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  557. # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
  558. F0("dns_get_mx", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  559. F0("getmxrr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  560. F1("dns_get_record", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
  561. # endif
  562. #endif
  563. F0("intval", MAY_BE_NULL | MAY_BE_LONG),
  564. F0("floatval", MAY_BE_NULL | MAY_BE_DOUBLE),
  565. F0("doubleval", MAY_BE_NULL | MAY_BE_DOUBLE),
  566. FN("strval", MAY_BE_NULL | MAY_BE_STRING),
  567. F0("boolval", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  568. FN("gettype", MAY_BE_NULL | MAY_BE_STRING),
  569. F0("settype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  570. FC("is_null", zend_is_type_info),
  571. F0("is_resource", MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline with support for closed resources
  572. FC("is_bool", zend_is_type_info),
  573. FC("is_long", zend_is_type_info),
  574. FC("is_float", zend_is_type_info),
  575. FC("is_int", zend_is_type_info),
  576. FC("is_integer", zend_is_type_info),
  577. FC("is_double", zend_is_type_info),
  578. FC("is_real", zend_is_type_info),
  579. F0("is_numeric", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  580. FC("is_string", zend_is_type_info),
  581. FC("is_array", zend_is_type_info),
  582. F0("is_object", MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline with support for incomplete class
  583. F0("is_scalar", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  584. F0("is_callable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  585. F0("is_countable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  586. F0("pclose", MAY_BE_FALSE | MAY_BE_LONG),
  587. F1("popen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  588. F0("readfile", MAY_BE_FALSE | MAY_BE_LONG),
  589. F0("rewind", MAY_BE_FALSE | MAY_BE_TRUE),
  590. F0("rmdir", MAY_BE_FALSE | MAY_BE_TRUE),
  591. F0("umask", MAY_BE_FALSE | MAY_BE_LONG),
  592. F0("fclose", MAY_BE_FALSE | MAY_BE_TRUE),
  593. F0("feof", MAY_BE_FALSE | MAY_BE_TRUE),
  594. F1("fgetc", MAY_BE_FALSE | MAY_BE_STRING),
  595. F1("fgets", MAY_BE_FALSE | MAY_BE_STRING),
  596. F1("fgetss", MAY_BE_FALSE | MAY_BE_STRING),
  597. F1("fread", MAY_BE_FALSE | MAY_BE_STRING),
  598. F1("fopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
  599. F0("fpassthru", MAY_BE_FALSE | MAY_BE_LONG),
  600. F0("ftruncate", MAY_BE_FALSE | MAY_BE_TRUE),
  601. F1("fstat", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
  602. F0("fseek", MAY_BE_FALSE | MAY_BE_LONG),
  603. F0("ftell", MAY_BE_FALSE | MAY_BE_LONG),
  604. F0("fflush", MAY_BE_FALSE | MAY_BE_TRUE),
  605. F0("fwrite", MAY_BE_FALSE | MAY_BE_LONG),
  606. F0("fputs", MAY_BE_FALSE | MAY_BE_LONG),
  607. F0("mkdir", MAY_BE_FALSE | MAY_BE_TRUE),
  608. F0("rename", MAY_BE_FALSE | MAY_BE_TRUE),
  609. F0("copy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  610. F1("tempnam", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  611. F1("tmpfile", MAY_BE_FALSE | MAY_BE_RESOURCE),
  612. F1("file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  613. F1("file_get_contents", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  614. F0("file_put_contents", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  615. F0("stream_select", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  616. F1("stream_context_create", MAY_BE_FALSE | MAY_BE_RESOURCE),
  617. F0("stream_context_set_params", MAY_BE_FALSE | MAY_BE_TRUE),
  618. F1("stream_context_get_params", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  619. F0("stream_context_set_option", MAY_BE_FALSE | MAY_BE_TRUE),
  620. FN("stream_context_get_options", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  621. FN("stream_context_get_default", MAY_BE_FALSE | MAY_BE_RESOURCE),
  622. FN("stream_context_set_default", MAY_BE_FALSE | MAY_BE_RESOURCE),
  623. FN("stream_filter_prepend", MAY_BE_FALSE | MAY_BE_RESOURCE),
  624. FN("stream_filter_append", MAY_BE_FALSE | MAY_BE_RESOURCE),
  625. F0("stream_filter_remove", MAY_BE_FALSE | MAY_BE_TRUE),
  626. F1("stream_socket_client", MAY_BE_FALSE | MAY_BE_RESOURCE),
  627. F1("stream_socket_server", MAY_BE_FALSE | MAY_BE_RESOURCE),
  628. F1("stream_socket_accept", MAY_BE_FALSE | MAY_BE_RESOURCE),
  629. F1("stream_socket_get_name", MAY_BE_FALSE | MAY_BE_STRING),
  630. F1("stream_socket_recvfrom", MAY_BE_FALSE | MAY_BE_STRING),
  631. F0("stream_socket_sendto", MAY_BE_FALSE | MAY_BE_LONG),
  632. F0("stream_socket_enable_crypto", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  633. #ifdef HAVE_SHUTDOWN
  634. F0("stream_socket_shutdown", MAY_BE_FALSE | MAY_BE_TRUE),
  635. #endif
  636. #if HAVE_SOCKETPAIR
  637. F1("stream_socket_pair", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_RESOURCE),
  638. #endif
  639. F0("stream_copy_to_stream", MAY_BE_FALSE | MAY_BE_LONG),
  640. F1("stream_get_contents", MAY_BE_FALSE | MAY_BE_STRING),
  641. F0("stream_supports_lock", MAY_BE_FALSE | MAY_BE_TRUE),
  642. F1("fgetcsv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
  643. F0("fputcsv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  644. F0("flock", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  645. F1("get_meta_tags", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  646. F0("stream_set_read_buffer", MAY_BE_FALSE | MAY_BE_LONG),
  647. F0("stream_set_write_buffer", MAY_BE_FALSE | MAY_BE_LONG),
  648. F0("set_file_buffer", MAY_BE_FALSE | MAY_BE_LONG),
  649. F0("stream_set_chunk_size", MAY_BE_FALSE | MAY_BE_LONG),
  650. F0("set_socket_blocking", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  651. F0("stream_set_blocking", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  652. F0("socket_set_blocking", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  653. F1("stream_get_meta_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  654. F1("stream_get_line", MAY_BE_FALSE | MAY_BE_STRING),
  655. F0("stream_wrapper_register", MAY_BE_FALSE | MAY_BE_TRUE),
  656. F0("stream_register_wrapper", MAY_BE_FALSE | MAY_BE_TRUE),
  657. F0("stream_wrapper_unregister", MAY_BE_FALSE | MAY_BE_TRUE),
  658. F0("stream_wrapper_restore", MAY_BE_FALSE | MAY_BE_TRUE),
  659. F1("stream_get_wrappers", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  660. F1("stream_get_transports", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  661. F1("stream_resolve_include_path", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  662. F0("stream_is_local", MAY_BE_FALSE | MAY_BE_TRUE),
  663. F1("get_headers", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  664. #if HAVE_SYS_TIME_H || defined(PHP_WIN32)
  665. F0("stream_set_timeout", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  666. F0("socket_set_timeout", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  667. #endif
  668. F1("socket_get_status", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  669. #if HAVE_REALPATH || defined(ZTS)
  670. F1("realpath", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  671. #endif
  672. #ifdef HAVE_FNMATCH
  673. F0("fnmatch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  674. #endif
  675. F1("fsockopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
  676. FN("pfsockopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
  677. F1("pack", MAY_BE_FALSE | MAY_BE_STRING),
  678. F1("unpack", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  679. F1("get_browser", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  680. F1("crypt", MAY_BE_NULL | MAY_BE_STRING),
  681. FN("opendir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  682. F0("closedir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  683. F0("chdir", MAY_BE_FALSE | MAY_BE_TRUE),
  684. #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
  685. F0("chroot", MAY_BE_FALSE | MAY_BE_TRUE),
  686. #endif
  687. F1("getcwd", MAY_BE_FALSE | MAY_BE_STRING),
  688. F0("rewinddir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  689. F1("readdir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  690. F1("dir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  691. F1("scandir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  692. #ifdef HAVE_GLOB
  693. F1("glob", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  694. #endif
  695. F0("fileatime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  696. F0("filectime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  697. F0("filegroup", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  698. F0("fileinode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  699. F0("filemtime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  700. F0("fileowner", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  701. F0("fileperms", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  702. F0("filesize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  703. F1("filetype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  704. F0("file_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  705. F0("is_writable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  706. F0("is_writeable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  707. F0("is_readable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  708. F0("is_executable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  709. F0("is_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  710. F0("is_dir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  711. F0("is_link", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  712. F1("stat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  713. F1("lstat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  714. F0("chown", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  715. F0("chgrp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  716. #if HAVE_LCHOWN
  717. F0("lchown", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  718. #endif
  719. #if HAVE_LCHOWN
  720. F0("lchgrp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  721. #endif
  722. F0("chmod", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  723. #if HAVE_UTIME
  724. F0("touch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  725. #endif
  726. F0("clearstatcache", MAY_BE_NULL),
  727. F0("disk_total_space", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  728. F0("disk_free_space", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  729. F0("diskfreespace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
  730. I0("realpath_cache_size", MAY_BE_LONG),
  731. I1("realpath_cache_get", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
  732. F0("mail", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  733. F0("ezmlm_hash", MAY_BE_NULL | MAY_BE_LONG),
  734. #ifdef HAVE_SYSLOG_H
  735. F0("openlog", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  736. F0("syslog", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  737. F0("closelog", MAY_BE_TRUE),
  738. #endif
  739. F0("lcg_value", MAY_BE_DOUBLE),
  740. F1("metaphone", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  741. F0("ob_start", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  742. F0("ob_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  743. F0("ob_clean", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  744. F0("ob_end_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  745. F0("ob_end_clean", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  746. F1("ob_get_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  747. F1("ob_get_clean", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  748. F0("ob_get_length", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  749. F0("ob_get_level", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  750. F1("ob_get_status", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  751. FN("ob_get_contents", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  752. F0("ob_implicit_flush", MAY_BE_NULL),
  753. F1("ob_list_handlers", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  754. F0("ksort", MAY_BE_FALSE | MAY_BE_TRUE),
  755. F0("krsort", MAY_BE_FALSE | MAY_BE_TRUE),
  756. F0("natsort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  757. F0("natcasesort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  758. F0("asort", MAY_BE_FALSE | MAY_BE_TRUE),
  759. F0("arsort", MAY_BE_FALSE | MAY_BE_TRUE),
  760. F0("sort", MAY_BE_FALSE | MAY_BE_TRUE),
  761. F0("rsort", MAY_BE_FALSE | MAY_BE_TRUE),
  762. F0("usort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  763. F0("uasort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  764. F0("uksort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  765. F0("shuffle", MAY_BE_FALSE | MAY_BE_TRUE),
  766. F0("array_walk", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  767. F0("array_walk_recursive", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  768. F0("count", MAY_BE_NULL | MAY_BE_LONG),
  769. FN("end", UNKNOWN_INFO),
  770. FN("prev", UNKNOWN_INFO),
  771. FN("next", UNKNOWN_INFO),
  772. FN("reset", UNKNOWN_INFO),
  773. FN("current", UNKNOWN_INFO),
  774. FN("key", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
  775. FN("min", UNKNOWN_INFO),
  776. FN("max", UNKNOWN_INFO),
  777. F0("in_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  778. FN("array_search", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  779. F0("extract", MAY_BE_NULL | MAY_BE_LONG),
  780. F1("compact", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  781. F1("array_fill", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
  782. F1("array_fill_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  783. FC("range", zend_range_info),
  784. F0("array_multisort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  785. F0("array_push", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  786. FN("array_pop", UNKNOWN_INFO),
  787. FN("array_shift", UNKNOWN_INFO),
  788. F0("array_unshift", MAY_BE_NULL | MAY_BE_LONG),
  789. F1("array_splice", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  790. F1("array_slice", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  791. F1("array_merge", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  792. F1("array_merge_recursive", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  793. F1("array_replace", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  794. F1("array_replace_recursive", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  795. FN("array_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  796. FN("array_values", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  797. F1("array_count_values", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
  798. F1("array_column", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  799. F1("array_reverse", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  800. F1("array_reduce", UNKNOWN_INFO),
  801. FN("array_pad", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  802. F1("array_flip", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  803. F1("array_change_key_case", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  804. F1("array_rand", UNKNOWN_INFO),
  805. FN("array_unique", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  806. F1("array_intersect", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  807. F1("array_intersect_key", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  808. F1("array_intersect_ukey", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  809. F1("array_uintersect", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  810. F1("array_intersect_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  811. F1("array_uintersect_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  812. F1("array_intersect_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  813. F1("array_uintersect_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  814. FN("array_diff", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  815. F1("array_diff_key", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  816. F1("array_diff_ukey", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  817. F1("array_udiff", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  818. F1("array_diff_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  819. F1("array_udiff_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  820. F1("array_diff_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  821. F1("array_udiff_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  822. F0("array_sum", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
  823. F0("array_product", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
  824. F1("array_filter", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  825. FN("array_map", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  826. F1("array_chunk", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  827. F1("array_combine", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  828. F0("array_key_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  829. F1("pos", UNKNOWN_INFO),
  830. F0("sizeof", MAY_BE_NULL | MAY_BE_LONG),
  831. F0("key_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  832. F0("assert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  833. F1("assert_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_OBJECT | MAY_BE_OBJECT),
  834. F0("version_compare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  835. #if HAVE_FTOK
  836. F0("ftok", MAY_BE_NULL | MAY_BE_LONG),
  837. #endif
  838. F1("str_rot13", MAY_BE_NULL | MAY_BE_STRING),
  839. I1("stream_get_filters", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  840. F0("stream_filter_register", MAY_BE_FALSE | MAY_BE_TRUE),
  841. F1("stream_bucket_make_writeable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  842. F1("stream_bucket_prepend", MAY_BE_FALSE | MAY_BE_OBJECT),
  843. F1("stream_bucket_append", MAY_BE_FALSE | MAY_BE_OBJECT),
  844. F1("stream_bucket_new", MAY_BE_FALSE | MAY_BE_OBJECT),
  845. F0("output_add_rewrite_var", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  846. F0("output_reset_rewrite_vars", MAY_BE_FALSE),
  847. I1("sys_get_temp_dir", MAY_BE_STRING),
  848. /* ext/date */
  849. F0("strtotime", MAY_BE_FALSE | MAY_BE_LONG),
  850. F1("date", MAY_BE_FALSE | MAY_BE_STRING),
  851. F0("idate", MAY_BE_FALSE | MAY_BE_LONG),
  852. F1("gmdate", MAY_BE_FALSE | MAY_BE_STRING),
  853. F0("mktime", MAY_BE_FALSE | MAY_BE_LONG),
  854. F0("gmmktime", MAY_BE_FALSE | MAY_BE_LONG),
  855. F0("checkdate", MAY_BE_FALSE | MAY_BE_TRUE),
  856. #ifdef HAVE_STRFTIME
  857. F1("strftime", MAY_BE_FALSE | MAY_BE_STRING),
  858. F1("gmstrftime", MAY_BE_FALSE | MAY_BE_STRING),
  859. #endif
  860. F0("time", MAY_BE_LONG),
  861. F1("localtime", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
  862. F1("getdate", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
  863. F1("date_create", MAY_BE_FALSE | MAY_BE_OBJECT),
  864. F1("date_create_immutable", MAY_BE_FALSE | MAY_BE_OBJECT),
  865. F1("date_create_from_format", MAY_BE_FALSE | MAY_BE_OBJECT),
  866. F1("date_create_immutable_from_format", MAY_BE_FALSE | MAY_BE_OBJECT),
  867. F1("date_parse", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  868. F1("date_parse_from_format", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  869. F1("date_get_last_errors", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_ARRAY),
  870. F1("date_format", MAY_BE_FALSE | MAY_BE_STRING),
  871. FN("date_modify", MAY_BE_FALSE | MAY_BE_OBJECT),
  872. FN("date_add", MAY_BE_FALSE | MAY_BE_OBJECT),
  873. FN("date_sub", MAY_BE_FALSE | MAY_BE_OBJECT),
  874. F1("date_timezone_get", MAY_BE_FALSE | MAY_BE_OBJECT),
  875. FN("date_timezone_set", MAY_BE_FALSE | MAY_BE_OBJECT),
  876. F0("date_offset_get", MAY_BE_FALSE | MAY_BE_LONG),
  877. F1("date_diff", MAY_BE_FALSE | MAY_BE_OBJECT),
  878. FN("date_time_set", MAY_BE_FALSE | MAY_BE_OBJECT),
  879. FN("date_date_set", MAY_BE_FALSE | MAY_BE_OBJECT),
  880. FN("date_isodate_set", MAY_BE_FALSE | MAY_BE_OBJECT),
  881. FN("date_timestamp_set", MAY_BE_FALSE | MAY_BE_OBJECT),
  882. F0("date_timestamp_get", MAY_BE_FALSE | MAY_BE_LONG),
  883. F1("timezone_open", MAY_BE_FALSE | MAY_BE_OBJECT),
  884. F1("timezone_name_get", MAY_BE_FALSE | MAY_BE_STRING),
  885. F1("timezone_name_from_abbr", MAY_BE_FALSE | MAY_BE_STRING),
  886. F0("timezone_offset_get", MAY_BE_FALSE | MAY_BE_LONG),
  887. F1("timezone_transitions_get", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  888. F1("timezone_location_get", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING),
  889. F1("timezone_identifiers_list", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  890. F1("timezone_abbreviations_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
  891. F1("timezone_version_get", MAY_BE_STRING),
  892. F1("date_interval_create_from_date_string", MAY_BE_FALSE | MAY_BE_OBJECT),
  893. F1("date_interval_format", MAY_BE_FALSE | MAY_BE_STRING),
  894. F0("date_default_timezone_set", MAY_BE_FALSE | MAY_BE_TRUE),
  895. F1("date_default_timezone_get", MAY_BE_STRING),
  896. F1("date_sunrise", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING),
  897. F1("date_sunset", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING),
  898. F1("date_sun_info", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG),
  899. /* ext/preg */
  900. F0("preg_match", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  901. F0("preg_match_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  902. FN("preg_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
  903. FN("preg_replace_callback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
  904. F1("preg_filter", MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
  905. F1("preg_split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  906. FN("preg_quote", MAY_BE_NULL | MAY_BE_STRING),
  907. F1("preg_grep", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
  908. F0("preg_last_error", MAY_BE_NULL | MAY_BE_LONG),
  909. /* ext/ereg */
  910. F0("ereg", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  911. F1("ereg_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  912. F0("eregi", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  913. F1("eregi_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  914. F1("split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  915. F1("spliti", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  916. F1("sql_regcase", MAY_BE_NULL | MAY_BE_STRING),
  917. /* ext/mysql */
  918. F1("mysql_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  919. F1("mysql_pconnect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  920. F0("mysql_close", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  921. F0("mysql_select_db", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  922. F0("mysql_create_db", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  923. F0("mysql_drop_db", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  924. F1("mysql_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE),
  925. F1("mysql_unbuffered_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE),
  926. F1("mysql_db_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE),
  927. F1("mysql_list_dbs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  928. F1("mysql_list_tables", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  929. F1("mysql_list_fields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  930. F1("mysql_list_processes", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  931. F1("mysql_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  932. F0("mysql_errno", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  933. F0("mysql_affected_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  934. F0("mysql_insert_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  935. F1("mysql_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  936. F0("mysql_num_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  937. F0("mysql_num_fields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  938. F1("mysql_fetch_row", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
  939. F1("mysql_fetch_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  940. F1("mysql_fetch_assoc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  941. F1("mysql_fetch_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  942. F0("mysql_data_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  943. F1("mysql_fetch_lengths", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  944. F1("mysql_fetch_field", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  945. F0("mysql_field_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  946. F0("mysql_free_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  947. F1("mysql_field_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  948. F1("mysql_field_table", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  949. F0("mysql_field_len", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  950. F1("mysql_field_type", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  951. F1("mysql_field_flags", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  952. F1("mysql_escape_string", MAY_BE_NULL | MAY_BE_STRING),
  953. F1("mysql_real_escape_string", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  954. F1("mysql_stat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  955. F0("mysql_thread_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  956. F1("mysql_client_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  957. F0("mysql_ping", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  958. F1("mysql_get_client_info", MAY_BE_NULL | MAY_BE_STRING),
  959. F1("mysql_get_host_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  960. F0("mysql_get_proto_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  961. F1("mysql_get_server_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  962. F1("mysql_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  963. F0("mysql_set_charset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  964. F1("mysql", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  965. F1("mysql_fieldname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  966. F1("mysql_fieldtable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  967. F0("mysql_fieldlen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  968. F1("mysql_fieldtype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  969. F1("mysql_fieldflags", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  970. F0("mysql_selectdb", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  971. F0("mysql_createdb", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  972. F0("mysql_dropdb", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  973. F0("mysql_freeresult", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  974. F0("mysql_numfields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  975. F0("mysql_numrows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  976. F1("mysql_listdbs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  977. F1("mysql_listtables", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  978. F1("mysql_listfields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  979. F1("mysql_db_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  980. F1("mysql_dbname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  981. F1("mysql_tablename", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  982. F1("mysql_table_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  983. /* ext/mysqli */
  984. F1("mysqli_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  985. F0("mysqli_close", MAY_BE_NULL | MAY_BE_TRUE),
  986. I1("mysqli_connect_error", MAY_BE_NULL | MAY_BE_STRING),
  987. I0("mysqli_connect_errno", MAY_BE_LONG),
  988. F1("mysqli_get_client_stats", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  989. F1("mysqli_error_list", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
  990. F1("mysqli_get_links_stats", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
  991. F1("mysqli_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_OBJECT),
  992. F0("mysqli_multi_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  993. F0("mysqli_set_charset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  994. F1("mysqli_get_charset", MAY_BE_NULL | MAY_BE_OBJECT),
  995. F0("mysqli_begin_transaction", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  996. F0("mysqli_savepoint", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  997. F0("mysqli_release_savepoint", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  998. F1("mysqli_fetch_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  999. F1("mysqli_fetch_assoc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  1000. F1("mysqli_fetch_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1001. F1("mysqli_fetch_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1002. F0("mysqli_free_result", MAY_BE_NULL),
  1003. F1("mysqli_affected_rows", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
  1004. F0("mysqli_autocommit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1005. F0("mysqli_stmt_bind_param", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1006. F0("mysqli_stmt_bind_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1007. F0("mysqli_change_user", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1008. F1("mysqli_character_set_name", MAY_BE_NULL | MAY_BE_STRING),
  1009. F0("mysqli_commit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1010. F0("mysqli_data_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1011. F0("mysqli_debug", MAY_BE_NULL | MAY_BE_TRUE),
  1012. F0("mysqli_dump_debug_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1013. F0("mysqli_errno", MAY_BE_NULL | MAY_BE_LONG),
  1014. F1("mysqli_error", MAY_BE_NULL | MAY_BE_STRING),
  1015. F0("mysqli_stmt_execute", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1016. F0("mysqli_poll", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1017. F1("mysqli_reap_async_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_OBJECT),
  1018. F1("mysqli_stmt_get_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1019. F1("mysqli_get_warnings", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1020. F1("mysqli_stmt_error_list", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
  1021. F1("mysqli_stmt_get_warnings", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1022. F0("mysqli_stmt_fetch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1023. F1("mysqli_fetch_field", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1024. F1("mysqli_fetch_fields", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_OBJECT),
  1025. F1("mysqli_fetch_field_direct", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1026. F1("mysqli_fetch_lengths", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1027. F1("mysqli_fetch_row", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
  1028. F0("mysqli_field_count", MAY_BE_NULL | MAY_BE_LONG),
  1029. F0("mysqli_field_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1030. F0("mysqli_field_tell", MAY_BE_NULL | MAY_BE_LONG),
  1031. I1("mysqli_get_client_info", MAY_BE_STRING),
  1032. I0("mysqli_get_client_version", MAY_BE_LONG),
  1033. F1("mysqli_get_host_info", MAY_BE_NULL | MAY_BE_STRING),
  1034. F0("mysqli_get_proto_info", MAY_BE_NULL | MAY_BE_LONG),
  1035. F1("mysqli_get_server_info", MAY_BE_NULL | MAY_BE_STRING),
  1036. F0("mysqli_get_server_version", MAY_BE_NULL | MAY_BE_LONG),
  1037. F1("mysqli_info", MAY_BE_NULL | MAY_BE_STRING),
  1038. F1("mysqli_init", MAY_BE_FALSE | MAY_BE_OBJECT),
  1039. F1("mysqli_insert_id", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
  1040. F0("mysqli_kill", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1041. F0("mysqli_more_results", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1042. F0("mysqli_next_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1043. F0("mysqli_stmt_more_results", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1044. F0("mysqli_stmt_next_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1045. F0("mysqli_num_fields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1046. F1("mysqli_num_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1047. F0("mysqli_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1048. F0("mysqli_ping", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1049. F1("mysqli_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1050. F0("mysqli_real_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1051. F0("mysqli_real_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1052. F1("mysqli_real_escape_string", MAY_BE_NULL | MAY_BE_STRING),
  1053. F0("mysqli_rollback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1054. F0("mysqli_stmt_send_long_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1055. F1("mysqli_stmt_affected_rows", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
  1056. F0("mysqli_stmt_close", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1057. F0("mysqli_stmt_data_seek", MAY_BE_NULL | MAY_BE_FALSE),
  1058. F0("mysqli_stmt_field_count", MAY_BE_NULL | MAY_BE_LONG),
  1059. F0("mysqli_stmt_free_result", MAY_BE_NULL),
  1060. F1("mysqli_stmt_insert_id", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
  1061. F0("mysqli_stmt_param_count", MAY_BE_NULL | MAY_BE_LONG),
  1062. F0("mysqli_stmt_reset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1063. F1("mysqli_stmt_num_rows", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
  1064. F0("mysqli_select_db", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1065. F1("mysqli_sqlstate", MAY_BE_NULL | MAY_BE_STRING),
  1066. F0("mysqli_ssl_set", MAY_BE_NULL | MAY_BE_TRUE),
  1067. F1("mysqli_stat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1068. F0("mysqli_refresh", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1069. F0("mysqli_stmt_attr_set", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1070. F0("mysqli_stmt_attr_get", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1071. F0("mysqli_stmt_errno", MAY_BE_NULL | MAY_BE_LONG),
  1072. F1("mysqli_stmt_error", MAY_BE_NULL | MAY_BE_STRING),
  1073. F1("mysqli_stmt_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1074. F0("mysqli_stmt_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1075. F1("mysqli_stmt_result_metadata", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1076. F0("mysqli_stmt_store_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1077. F1("mysqli_stmt_sqlstate", MAY_BE_NULL | MAY_BE_STRING),
  1078. F1("mysqli_store_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1079. F0("mysqli_thread_id", MAY_BE_NULL | MAY_BE_LONG),
  1080. I0("mysqli_thread_safe", MAY_BE_FALSE | MAY_BE_TRUE),
  1081. F1("mysqli_use_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1082. F0("mysqli_warning_count", MAY_BE_NULL | MAY_BE_LONG),
  1083. /* ext/curl */
  1084. F1("curl_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1085. F1("curl_copy_handle", MAY_BE_NULL | MAY_BE_RESOURCE),
  1086. F1("curl_version", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  1087. F0("curl_setopt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1088. F0("curl_setopt_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1089. FN("curl_exec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1090. F1("curl_getinfo", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1091. F1("curl_error", MAY_BE_NULL | MAY_BE_STRING),
  1092. F0("curl_errno", MAY_BE_NULL | MAY_BE_LONG),
  1093. F0("curl_close", MAY_BE_NULL),
  1094. F1("curl_strerror", MAY_BE_NULL | MAY_BE_STRING),
  1095. F1("curl_multi_strerror", MAY_BE_NULL | MAY_BE_STRING),
  1096. F0("curl_reset", MAY_BE_NULL),
  1097. F1("curl_escape", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1098. F1("curl_unescape", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1099. F0("curl_pause", MAY_BE_NULL | MAY_BE_LONG),
  1100. F1("curl_multi_init", MAY_BE_RESOURCE),
  1101. F0("curl_multi_add_handle", MAY_BE_NULL | MAY_BE_LONG),
  1102. F0("curl_multi_remove_handle", MAY_BE_NULL | MAY_BE_LONG),
  1103. F0("curl_multi_select", MAY_BE_NULL | MAY_BE_LONG),
  1104. F0("curl_multi_exec", MAY_BE_NULL | MAY_BE_LONG),
  1105. FN("curl_multi_getcontent", MAY_BE_NULL | MAY_BE_STRING),
  1106. F1("curl_multi_info_read", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_RESOURCE),
  1107. F0("curl_multi_close", MAY_BE_NULL | MAY_BE_FALSE),
  1108. F0("curl_multi_setopt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1109. I1("curl_share_init", MAY_BE_RESOURCE),
  1110. F0("curl_share_close", MAY_BE_NULL),
  1111. F0("curl_share_setopt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1112. F1("curl_file_create", MAY_BE_OBJECT),
  1113. /* ext/mbstring */
  1114. F1("mb_convert_case", MAY_BE_FALSE | MAY_BE_STRING),
  1115. F1("mb_strtoupper", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1116. F1("mb_strtolower", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1117. F1("mb_language", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1118. F1("mb_internal_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1119. F1("mb_http_input", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1120. F1("mb_http_output", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1121. F1("mb_detect_order", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1122. F1("mb_substitute_character", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_STRING),
  1123. F0("mb_parse_str", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1124. F1("mb_output_handler", MAY_BE_NULL | MAY_BE_STRING),
  1125. F1("mb_preferred_mime_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1126. F0("mb_strlen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1127. F0("mb_strpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1128. F0("mb_strrpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1129. F0("mb_stripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1130. F0("mb_strripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1131. F1("mb_strstr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1132. F1("mb_strrchr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1133. F1("mb_stristr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1134. F1("mb_strrichr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1135. F0("mb_substr_count", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1136. F1("mb_substr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1137. F1("mb_strcut", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1138. F0("mb_strwidth", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1139. F1("mb_strimwidth", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1140. F1("mb_convert_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1141. F1("mb_detect_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1142. I1("mb_list_encodings", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1143. F1("mb_encoding_aliases", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1144. F1("mb_convert_kana", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1145. F1("mb_encode_mimeheader", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1146. F1("mb_decode_mimeheader", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1147. F1("mb_convert_variables", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1148. F1("mb_encode_numericentity", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1149. F1("mb_decode_numericentity", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1150. F0("mb_send_mail", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1151. F1("mb_get_info", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  1152. F0("mb_check_encoding", MAY_BE_FALSE | MAY_BE_TRUE),
  1153. F1("mb_regex_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1154. F1("mb_regex_set_options", MAY_BE_FALSE | MAY_BE_STRING),
  1155. F0("mb_ereg", MAY_BE_FALSE | MAY_BE_LONG),
  1156. F0("mb_eregi", MAY_BE_FALSE | MAY_BE_LONG),
  1157. F1("mb_ereg_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1158. F1("mb_eregi_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1159. F1("mb_ereg_replace_callback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1160. F1("mb_split", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1161. F0("mb_ereg_match", MAY_BE_FALSE | MAY_BE_TRUE),
  1162. F0("mb_ereg_search", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1163. F1("mb_ereg_search_pos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1164. F1("mb_ereg_search_regs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
  1165. F0("mb_ereg_search_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1166. F1("mb_ereg_search_getregs", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
  1167. F0("mb_ereg_search_getpos", MAY_BE_LONG),
  1168. F0("mb_ereg_search_setpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1169. F0("mbregex_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1170. F0("mbereg", MAY_BE_FALSE | MAY_BE_LONG),
  1171. F0("mberegi", MAY_BE_FALSE | MAY_BE_LONG),
  1172. F1("mbereg_replace", MAY_BE_FALSE | MAY_BE_STRING),
  1173. F1("mberegi_replace", MAY_BE_FALSE | MAY_BE_STRING),
  1174. F1("mbsplit", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1175. F0("mbereg_match", MAY_BE_FALSE | MAY_BE_TRUE),
  1176. F0("mbereg_search", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1177. F1("mbereg_search_pos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1178. F1("mbereg_search_regs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
  1179. F0("mbereg_search_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1180. F1("mbereg_search_getregs", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
  1181. F0("mbereg_search_getpos", MAY_BE_LONG),
  1182. F0("mbereg_search_setpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1183. /* ext/iconv */
  1184. F1("iconv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1185. F1("iconv_get_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  1186. F0("iconv_set_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1187. F0("iconv_strlen", MAY_BE_FALSE | MAY_BE_LONG),
  1188. F1("iconv_substr", MAY_BE_FALSE | MAY_BE_STRING),
  1189. F0("iconv_strpos", MAY_BE_FALSE | MAY_BE_LONG),
  1190. F0("iconv_strrpos", MAY_BE_FALSE | MAY_BE_LONG),
  1191. F1("iconv_mime_encode", MAY_BE_FALSE | MAY_BE_STRING),
  1192. F1("iconv_mime_decode", MAY_BE_FALSE | MAY_BE_STRING),
  1193. F1("iconv_mime_decode_headers", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
  1194. /* ext/json */
  1195. F1("json_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1196. F1("json_decode", MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1197. I0("json_last_error", MAY_BE_LONG),
  1198. I1("json_last_error_msg", MAY_BE_STRING),
  1199. /* ext/xml */
  1200. FN("xml_parser_create", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1201. FN("xml_parser_create_ns", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1202. F0("xml_set_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1203. F0("xml_set_element_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1204. F0("xml_set_character_data_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1205. F0("xml_set_processing_instruction_handler",MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1206. F0("xml_set_default_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1207. F0("xml_set_unparsed_entity_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1208. F0("xml_set_notation_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1209. F0("xml_set_external_entity_ref_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1210. F0("xml_set_start_namespace_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1211. F0("xml_set_end_namespace_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1212. F0("xml_parse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1213. F0("xml_parse_into_struct", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1214. F0("xml_get_error_code", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1215. F1("xml_error_string", MAY_BE_NULL | MAY_BE_STRING),
  1216. F0("xml_get_current_line_number", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1217. F0("xml_get_current_column_number", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1218. F0("xml_get_current_byte_index", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1219. F0("xml_parser_free", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1220. F0("xml_parser_set_option", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1221. F1("xml_parser_get_option", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1222. F1("utf8_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1223. F1("utf8_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1224. /* ext/zlib */
  1225. F0("readgzfile", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1226. F0("gzrewind", MAY_BE_FALSE | MAY_BE_TRUE),
  1227. F0("gzclose", MAY_BE_FALSE | MAY_BE_TRUE),
  1228. F0("gzeof", MAY_BE_FALSE | MAY_BE_TRUE),
  1229. F1("gzgetc", MAY_BE_FALSE | MAY_BE_STRING),
  1230. F1("gzgets", MAY_BE_FALSE | MAY_BE_STRING),
  1231. F1("gzgetss", MAY_BE_FALSE | MAY_BE_STRING),
  1232. F1("gzread", MAY_BE_FALSE | MAY_BE_STRING),
  1233. F1("gzopen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1234. F0("gzpassthru", MAY_BE_FALSE | MAY_BE_LONG),
  1235. F0("gzseek", MAY_BE_FALSE | MAY_BE_LONG),
  1236. F0("gztell", MAY_BE_FALSE | MAY_BE_LONG),
  1237. F0("gzwrite", MAY_BE_FALSE | MAY_BE_LONG),
  1238. F0("gzputs", MAY_BE_FALSE | MAY_BE_LONG),
  1239. F1("gzfile", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1240. F1("gzcompress", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1241. F1("gzuncompress", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1242. F1("gzdeflate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1243. F1("gzinflate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1244. F1("gzencode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1245. F1("gzdecode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1246. F1("zlib_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1247. F1("zlib_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1248. I1("zlib_get_coding_type", MAY_BE_FALSE | MAY_BE_STRING),
  1249. F1("ob_gzhandler", MAY_BE_FALSE | MAY_BE_STRING),
  1250. /* ext/hash */
  1251. F1("hash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1252. F1("hash_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1253. F1("hash_hmac", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1254. F1("hash_hmac_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1255. F1("hash_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1256. F0("hash_update", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1257. F0("hash_update_stream", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1258. F0("hash_update_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1259. F1("hash_final", MAY_BE_NULL | MAY_BE_STRING),
  1260. F1("hash_copy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1261. F1("hash_algos", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1262. F1("hash_pbkdf2", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1263. F1("mhash_keygen_s2k", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1264. F0("mhash_get_block_size", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1265. F1("mhash_get_hash_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1266. I0("mhash_count", MAY_BE_LONG),
  1267. F1("mhash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1268. /* ext/sodium */
  1269. F0("sodium_memzero", MAY_BE_NULL),
  1270. F0("sodium_increment", MAY_BE_NULL),
  1271. F0("sodium_add", MAY_BE_NULL),
  1272. F0("sodium_memcmp", MAY_BE_NULL | MAY_BE_LONG),
  1273. F1("sodium_crypto_shorthash", MAY_BE_NULL | MAY_BE_STRING),
  1274. F1("sodium_crypto_secretbox", MAY_BE_NULL | MAY_BE_STRING),
  1275. F1("sodium_crypto_secretbox_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1276. F1("sodium_crypto_generichash", MAY_BE_NULL | MAY_BE_STRING),
  1277. F1("sodium_crypto_generichash_init", MAY_BE_NULL | MAY_BE_STRING),
  1278. F0("sodium_crypto_generichash_update", MAY_BE_NULL | MAY_BE_TRUE),
  1279. F1("sodium_crypto_generichash_final", MAY_BE_NULL | MAY_BE_STRING),
  1280. F1("sodium_crypto_box_keypair", MAY_BE_STRING),
  1281. F1("sodium_crypto_box_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
  1282. F1("sodium_crypto_box_secretkey", MAY_BE_NULL | MAY_BE_STRING),
  1283. F1("sodium_crypto_box_publickey", MAY_BE_NULL | MAY_BE_STRING),
  1284. F1("sodium_crypto_box", MAY_BE_NULL | MAY_BE_STRING),
  1285. F1("sodium_crypto_box_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1286. F1("sodium_crypto_box_seal", MAY_BE_NULL | MAY_BE_STRING),
  1287. F1("sodium_crypto_box_seal_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1288. F1("sodium_crypto_sign_keypair", MAY_BE_STRING),
  1289. F1("sodium_crypto_sign_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
  1290. F1("sodium_crypto_sign_secretkey", MAY_BE_NULL | MAY_BE_STRING),
  1291. F1("sodium_crypto_sign_publickey", MAY_BE_NULL | MAY_BE_STRING),
  1292. F1("sodium_crypto_sign", MAY_BE_NULL | MAY_BE_STRING),
  1293. F1("sodium_crypto_sign_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1294. F1("sodium_crypto_sign_detached", MAY_BE_NULL | MAY_BE_STRING),
  1295. F0("sodium_crypto_sign_verify_detached", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1296. F1("sodium_crypto_stream", MAY_BE_NULL | MAY_BE_STRING),
  1297. F1("sodium_crypto_stream_xor", MAY_BE_NULL | MAY_BE_STRING),
  1298. F1("sodium_crypto_pwhash", MAY_BE_NULL | MAY_BE_STRING),
  1299. F1("sodium_crypto_pwhash_str", MAY_BE_NULL | MAY_BE_STRING),
  1300. F0("sodium_crypto_pwhash_str_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1301. F1("sodium_crypto_aead_aes256gcm_encrypt", MAY_BE_NULL | MAY_BE_STRING),
  1302. F1("sodium_crypto_aead_aes256gcm_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1303. F1("sodium_bin2hex", MAY_BE_NULL | MAY_BE_STRING),
  1304. F1("sodium_hex2bin", MAY_BE_NULL | MAY_BE_STRING),
  1305. F1("sodium_crypto_scalarmult", MAY_BE_NULL | MAY_BE_STRING),
  1306. F1("sodium_crypto_kx_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
  1307. F1("sodium_crypto_kx_keypair", MAY_BE_STRING),
  1308. F1("sodium_crypto_kx_secretkey", MAY_BE_NULL | MAY_BE_STRING),
  1309. F1("sodium_crypto_kx_publickey", MAY_BE_NULL | MAY_BE_STRING),
  1310. F1("sodium_crypto_kx_client_session_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1311. F1("sodium_crypto_kx_server_session_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1312. F1("sodium_crypto_auth", MAY_BE_NULL | MAY_BE_STRING),
  1313. F0("sodium_crypto_auth_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1314. F0("sodium_compare", MAY_BE_NULL | MAY_BE_LONG),
  1315. F1("sodium_crypto_aead_aes256gcm_keygen", MAY_BE_STRING),
  1316. F1("sodium_crypto_auth_keygen", MAY_BE_STRING),
  1317. F1("sodium_crypto_generichash_keygen", MAY_BE_STRING),
  1318. F1("sodium_crypto_kdf_keygen", MAY_BE_STRING),
  1319. F1("sodium_crypto_secretbox_keygen", MAY_BE_STRING),
  1320. F1("sodium_crypto_shorthash_keygen", MAY_BE_STRING),
  1321. F1("sodium_crypto_stream_keygen", MAY_BE_STRING),
  1322. F1("sodium_crypto_kdf_derive_from_key", MAY_BE_NULL | MAY_BE_STRING),
  1323. F1("sodium_pad", MAY_BE_NULL | MAY_BE_STRING),
  1324. F1("sodium_unpad", MAY_BE_NULL | MAY_BE_STRING),
  1325. F1("sodium_crypto_box_keypair_from_secretkey_and_publickey", MAY_BE_NULL | MAY_BE_STRING),
  1326. F1("sodium_crypto_box_publickey_from_secretkey", MAY_BE_NULL | MAY_BE_STRING),
  1327. F1("sodium_crypto_sign_keypair_from_secretkey_and_publickey", MAY_BE_NULL | MAY_BE_STRING),
  1328. F1("sodium_crypto_sign_publickey_from_secretkey", MAY_BE_NULL | MAY_BE_STRING),
  1329. F1("sodium_crypto_pwhash_scryptsalsa208sha256", MAY_BE_NULL | MAY_BE_STRING),
  1330. F1("sodium_crypto_pwhash_scryptsalsa208sha256_str", MAY_BE_NULL | MAY_BE_STRING),
  1331. F0("sodium_crypto_pwhash_scryptsalsa208sha256_str_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1332. F0("sodium_crypto_aead_aes256gcm_is_available", MAY_BE_FALSE | MAY_BE_TRUE),
  1333. F1("sodium_crypto_sign_ed25519_sk_to_curve25519", MAY_BE_NULL | MAY_BE_STRING),
  1334. F1("sodium_crypto_sign_ed25519_pk_to_curve25519", MAY_BE_NULL | MAY_BE_STRING),
  1335. F1("sodium_crypto_aead_chacha20poly1305_encrypt", MAY_BE_NULL | MAY_BE_STRING),
  1336. F1("sodium_crypto_aead_chacha20poly1305_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1337. F1("sodium_crypto_aead_chacha20poly1305_ietf_encrypt", MAY_BE_NULL | MAY_BE_STRING),
  1338. F1("sodium_crypto_aead_chacha20poly1305_ietf_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1339. F1("sodium_crypto_aead_xchacha20poly1305_ietf_encrypt", MAY_BE_NULL | MAY_BE_STRING),
  1340. F1("sodium_crypto_aead_xchacha20poly1305_ietf_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1341. F1("sodium_crypto_aead_chacha20poly1305_keygen", MAY_BE_STRING),
  1342. F1("sodium_crypto_aead_chacha20poly1305_ietf_keygen", MAY_BE_STRING),
  1343. F1("sodium_crypto_aead_xchacha20poly1305_ietf_keygen", MAY_BE_STRING),
  1344. /* ext/session */
  1345. F0("session_set_cookie_params", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1346. I1("session_get_cookie_params", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  1347. F1("session_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1348. F1("session_module_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1349. F0("session_set_save_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1350. F1("session_save_path", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1351. FN("session_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1352. F0("session_regenerate_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1353. F1("session_create_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1354. F1("session_cache_limiter", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1355. F0("session_cache_expire", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1356. I1("session_encode", MAY_BE_FALSE | MAY_BE_STRING),
  1357. F0("session_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1358. F0("session_start", MAY_BE_FALSE | MAY_BE_TRUE),
  1359. I0("session_destroy", MAY_BE_FALSE | MAY_BE_TRUE),
  1360. I0("session_unset", MAY_BE_FALSE | MAY_BE_TRUE),
  1361. F0("session_gc", MAY_BE_FALSE | MAY_BE_LONG),
  1362. F0("session_write_close", MAY_BE_FALSE | MAY_BE_TRUE),
  1363. F0("session_abort", MAY_BE_FALSE | MAY_BE_TRUE),
  1364. F0("session_reset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1365. F0("session_status", MAY_BE_NULL | MAY_BE_LONG),
  1366. I0("session_register_shutdown", MAY_BE_NULL),
  1367. /* ext/pgsql */
  1368. F1("pg_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1369. FN("pg_pconnect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1370. F0("pg_connect_poll", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1371. F0("pg_close", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1372. F1("pg_dbname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1373. F1("pg_last_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1374. F1("pg_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1375. F1("pg_port", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1376. F1("pg_tty", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1377. F1("pg_host", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1378. F1("pg_version", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
  1379. F1("pg_parameter_status", MAY_BE_FALSE | MAY_BE_STRING),
  1380. F0("pg_ping", MAY_BE_FALSE | MAY_BE_TRUE),
  1381. F1("pg_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1382. F1("pg_query_params", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1383. F1("pg_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1384. F1("pg_execute", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1385. F0("pg_num_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1386. F0("pg_num_fields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1387. F0("pg_affected_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1388. FN("pg_last_notice", UNKNOWN_INFO),
  1389. F1("pg_field_table", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1390. F1("pg_field_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1391. F0("pg_field_size", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1392. F1("pg_field_type", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1393. F1("pg_field_type_oid", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1394. F0("pg_field_num", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1395. F1("pg_fetch_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1396. F1("pg_fetch_row", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
  1397. F1("pg_fetch_assoc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
  1398. F1("pg_fetch_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
  1399. F1("pg_fetch_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
  1400. F1("pg_fetch_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
  1401. F1("pg_fetch_all_columns", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
  1402. F0("pg_result_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1403. F0("pg_field_prtlen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1404. F0("pg_field_is_null", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1405. F0("pg_free_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1406. F1("pg_last_oid", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1407. F0("pg_trace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1408. F0("pg_untrace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1409. F1("pg_lo_create", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1410. F0("pg_lo_unlink", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1411. F1("pg_lo_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1412. F1("pg_lo_read", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1413. F0("pg_lo_write", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1414. F0("pg_lo_read_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1415. F1("pg_lo_import", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1416. F0("pg_lo_export", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1417. F0("pg_lo_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1418. F0("pg_lo_tell", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1419. F0("pg_lo_truncate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1420. F0("pg_set_error_verbosity", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1421. F0("pg_set_client_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1422. F0("pg_end_copy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1423. F0("pg_put_line", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1424. F1("pg_copy_to", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1425. F0("pg_copy_from", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1426. F1("pg_escape_string", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1427. F1("pg_escape_bytea", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1428. F1("pg_unescape_bytea", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1429. F1("pg_escape_literal", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1430. F1("pg_escape_identifier", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1431. F1("pg_result_error", MAY_BE_FALSE | MAY_BE_STRING),
  1432. F1("pg_result_error_field", MAY_BE_FALSE | MAY_BE_STRING),
  1433. F0("pg_connection_status", MAY_BE_FALSE | MAY_BE_LONG),
  1434. F0("pg_transaction_status", MAY_BE_FALSE | MAY_BE_LONG),
  1435. F0("pg_connection_reset", MAY_BE_FALSE | MAY_BE_TRUE),
  1436. F0("pg_cancel_query", MAY_BE_FALSE | MAY_BE_TRUE),
  1437. F0("pg_connection_busy", MAY_BE_FALSE | MAY_BE_TRUE),
  1438. F0("pg_send_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  1439. F0("pg_send_query_params", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  1440. F0("pg_send_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  1441. F0("pg_send_execute", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  1442. F1("pg_get_result", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1443. F1("pg_result_status", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
  1444. F1("pg_get_notify", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1445. F0("pg_get_pid", MAY_BE_FALSE | MAY_BE_LONG),
  1446. F1("pg_socket", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1447. F0("pg_consume_input", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1448. F0("pg_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
  1449. F1("pg_meta_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
  1450. F1("pg_convert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  1451. F1("pg_insert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE | MAY_BE_STRING),
  1452. F1("pg_update", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1453. F1("pg_delete", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1454. F1("pg_select", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
  1455. /* ext/bcmath */
  1456. F1("bcadd", MAY_BE_NULL | MAY_BE_STRING),
  1457. F1("bcsub", MAY_BE_NULL | MAY_BE_STRING),
  1458. F1("bcmul", MAY_BE_NULL | MAY_BE_STRING),
  1459. F1("bcdiv", MAY_BE_NULL | MAY_BE_STRING),
  1460. F1("bcmod", MAY_BE_NULL | MAY_BE_STRING),
  1461. F1("bcpowmod", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1462. F1("bcpow", MAY_BE_NULL | MAY_BE_STRING),
  1463. F1("bcsqrt", MAY_BE_NULL | MAY_BE_STRING),
  1464. F0("bccomp", MAY_BE_NULL | MAY_BE_LONG),
  1465. F0("bcscale", MAY_BE_NULL | MAY_BE_LONG),
  1466. /* ext/exif */
  1467. F1("exif_tagname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1468. F1("exif_read_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
  1469. F1("exif_thumbnail", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1470. F0("exif_imagetype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1471. /* ext/filter */
  1472. F0("filter_has_var", MAY_BE_FALSE | MAY_BE_TRUE),
  1473. FN("filter_input", UNKNOWN_INFO),
  1474. FN("filter_var", UNKNOWN_INFO),
  1475. F1("filter_input_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1476. F1("filter_var_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
  1477. I1("filter_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
  1478. F0("filter_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1479. /* ext/gettext */
  1480. F1("textdomain", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1481. F1("gettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1482. F1("_", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1483. F1("dgettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1484. F1("dcgettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1485. F1("bindtextdomain", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1486. #if HAVE_NGETTEXT
  1487. F1("ngettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1488. #endif
  1489. #if HAVE_DNGETTEXT
  1490. F1("dcngettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1491. #endif
  1492. #if HAVE_BIND_TEXTDOMAIN_CODESET
  1493. F1("bind_textdomain_codeset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1494. #endif
  1495. /* ext/ctype */
  1496. F0("ctype_alnum", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1497. F0("ctype_alpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1498. F0("ctype_cntrl", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1499. F0("ctype_digit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1500. F0("ctype_lower", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1501. F0("ctype_graph", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1502. F0("ctype_print", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1503. F0("ctype_punct", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1504. F0("ctype_space", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1505. F0("ctype_upper", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1506. F0("ctype_xdigit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1507. /* ext/fileinfo */
  1508. F1("finfo_open", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1509. F0("finfo_close", MAY_BE_FALSE | MAY_BE_TRUE),
  1510. F0("finfo_set_flags", MAY_BE_FALSE | MAY_BE_TRUE),
  1511. F1("finfo_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1512. F1("finfo_buffer", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1513. F1("mime_content_type", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
  1514. /* ext/gd */
  1515. F1("gd_info", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE),
  1516. F0("imageloadfont", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1517. F0("imagesetstyle", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1518. F1("imagecreatetruecolor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1519. F0("imageistruecolor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1520. F0("imagetruecolortopalette", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1521. F0("imagepalettetotruecolor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1522. F0("imagecolormatch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1523. F0("imagesetthickness", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1524. F0("imagefilledellipse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1525. F0("imagefilledarc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1526. F0("imagealphablending", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1527. F0("imagesavealpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1528. F0("imagelayereffect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1529. F0("imagecolorallocatealpha", MAY_BE_FALSE | MAY_BE_LONG),
  1530. F0("imagecolorresolvealpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1531. F0("imagecolorclosestalpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1532. F0("imagecolorexactalpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1533. F0("imagecopyresampled", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1534. #ifdef PHP_WIN32
  1535. F1("imagegrabwindow", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1536. F1("imagegrabscreen", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1537. #endif
  1538. F1("imagerotate", MAY_BE_FALSE | MAY_BE_RESOURCE),
  1539. F0("imagesettile", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1540. F0("imagesetbrush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1541. F1("imagecreate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1542. I0("imagetypes", MAY_BE_LONG),
  1543. F1("imagecreatefromstring", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1544. F1("imagecreatefromgif", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1545. #ifdef HAVE_GD_JPG
  1546. F1("imagecreatefromjpeg", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1547. F0("imagejpeg", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1548. F0("jpeg2wbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1549. #endif
  1550. #ifdef HAVE_GD_PNG
  1551. F1("imagecreatefrompng", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1552. F0("imagepng", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1553. F0("png2wbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1554. #endif
  1555. #ifdef HAVE_GD_WEBP
  1556. F1("imagecreatefromwebp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1557. F0("imagewebp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1558. #endif
  1559. F1("imagecreatefromxbm", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1560. #if defined(HAVE_GD_XPM)
  1561. F1("imagecreatefromxpm", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1562. #endif
  1563. F1("imagecreatefromwbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1564. F1("imagecreatefromgd", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1565. F1("imagecreatefromgd2", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1566. F1("imagecreatefromgd2part", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1567. #if defined(HAVE_GD_BMP)
  1568. F1("imagecreatefrombmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1569. F0("imagebmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1570. #endif
  1571. F0("imagexbm", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1572. F0("imagegif", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1573. F0("imagewbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1574. F0("imagegd", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1575. F0("imagegd2", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1576. F0("imagedestroy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1577. F0("magecolorallocate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1578. F0("imagepalettecopy", MAY_BE_NULL | MAY_BE_FALSE),
  1579. F0("imagecolorat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1580. F0("imagecolorclosest", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1581. F0("imagecolorclosesthwb", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1582. F0("imagecolordeallocate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1583. F0("imagecolorresolve", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1584. F0("imagecolorexact", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1585. F0("imagecolorset", MAY_BE_NULL | MAY_BE_FALSE),
  1586. F1("imagecolorsforindex", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
  1587. F0("imagegammacorrect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1588. F0("imagesetpixel", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1589. F0("imageline", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1590. F0("imagedashedline", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1591. F0("imagerectangle", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1592. F0("imagefilledrectangle", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1593. F0("imagearc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1594. F0("imageellipse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1595. F0("imagefilltoborder", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1596. F0("imagefill", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1597. F0("imagecolorstotal", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1598. F0("imagecolortransparent", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1599. F0("imageinterlace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1600. F0("imagepolygon", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1601. F0("imageopenpolygon", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1602. F0("imagefilledpolygon", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1603. F0("imagefontwidth", MAY_BE_NULL | MAY_BE_LONG),
  1604. F0("imagefontheight", MAY_BE_NULL | MAY_BE_LONG),
  1605. F0("imagechar", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1606. F0("imagecharup", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1607. F0("imagestring", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1608. F0("imagestringup", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1609. F0("imagecopy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1610. F0("imagecopymerge", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1611. F0("imagecopymergegray", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1612. F0("imagecopyresized", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1613. F0("imagesx", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1614. F0("imagesy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
  1615. F0("imagesetclip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1616. F1("imagegetclip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1617. F1("imageftbbox", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1618. F1("imagefttext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1619. F1("imagettfbbox", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1620. F1("imagettftext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1621. F0("image2wbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1622. F0("imagefilter", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1623. F0("imageconvolution", MAY_BE_FALSE | MAY_BE_TRUE),
  1624. F0("imageflip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1625. F0("imageantialias", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1626. F1("imagecrop", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1627. F1("imagecropauto", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1628. F1("imagescale", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1629. F1("imageaffine", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
  1630. F1("imageaffinematrixget", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
  1631. F1("imageaffinematrixconcat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
  1632. F0("imagesetinterpolation", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
  1633. F1("imageresolution", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
  1634. };
  1635. static HashTable func_info;
  1636. int zend_func_info_rid = -1;
  1637. uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa)
  1638. {
  1639. uint32_t ret = 0;
  1640. const zend_function *callee_func = call_info->callee_func;
  1641. if (callee_func->type == ZEND_INTERNAL_FUNCTION) {
  1642. zval *zv;
  1643. func_info_t *info;
  1644. if (!call_info->callee_func->common.scope && (zv = zend_hash_find_ex(&func_info, Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline, call_info->caller_init_opline->op2, ssa->rt_constants)), 1))) {
  1645. info = Z_PTR_P(zv);
  1646. if (UNEXPECTED(zend_optimizer_is_disabled_func(info->name, info->name_len))) {
  1647. ret = MAY_BE_NULL;
  1648. } else if (info->info_func) {
  1649. ret = info->info_func(call_info, ssa);
  1650. } else if (/*callee_func->common.arg_info && */
  1651. callee_func->common.num_args == 0 &&
  1652. callee_func->common.required_num_args == 0 &&
  1653. !(callee_func->common.fn_flags & ZEND_ACC_VARIADIC)) {
  1654. if (call_info->num_args == 0) {
  1655. ret = info->info;
  1656. } else {
  1657. ret = FUNC_MAY_WARN | MAY_BE_NULL;
  1658. }
  1659. } else {
  1660. ret = info->info;
  1661. }
  1662. #if 0
  1663. } else {
  1664. fprintf(stderr, "Unknown internal function '%s'\n", func->common.function_name);
  1665. #endif
  1666. }
  1667. } else {
  1668. // FIXME: the order of functions matters!!!
  1669. zend_func_info *info = ZEND_FUNC_INFO((zend_op_array*)callee_func);
  1670. if (info) {
  1671. ret = info->return_info.type;
  1672. }
  1673. }
  1674. if (!ret) {
  1675. ret = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
  1676. if (callee_func->type == ZEND_INTERNAL_FUNCTION) {
  1677. ret |= FUNC_MAY_WARN;
  1678. }
  1679. if (callee_func->common.fn_flags & ZEND_ACC_GENERATOR) {
  1680. ret = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT;
  1681. } else if (callee_func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) {
  1682. ret |= MAY_BE_REF;
  1683. } else {
  1684. ret |= MAY_BE_RC1 | MAY_BE_RCN;
  1685. }
  1686. }
  1687. return ret;
  1688. }
  1689. int zend_func_info_startup(void)
  1690. {
  1691. zend_extension dummy;
  1692. size_t i;
  1693. if (zend_func_info_rid == -1) {
  1694. zend_func_info_rid = zend_get_resource_handle(&dummy);
  1695. if (zend_func_info_rid < 0) {
  1696. return FAILURE;
  1697. }
  1698. zend_hash_init(&func_info, sizeof(func_infos)/sizeof(func_info_t), NULL, NULL, 1);
  1699. for (i = 0; i < sizeof(func_infos)/sizeof(func_info_t); i++) {
  1700. zend_string *key = zend_string_init_interned(func_infos[i].name, func_infos[i].name_len, 1);
  1701. if (zend_hash_add_ptr(&func_info, key, (void**)&func_infos[i]) == NULL) {
  1702. fprintf(stderr, "ERROR: Duplicate function info for \"%s\"\n", func_infos[i].name);
  1703. }
  1704. zend_string_release_ex(key, 1);
  1705. }
  1706. }
  1707. return SUCCESS;
  1708. }
  1709. int zend_func_info_shutdown(void)
  1710. {
  1711. if (zend_func_info_rid != -1) {
  1712. zend_hash_destroy(&func_info);
  1713. zend_func_info_rid = -1;
  1714. }
  1715. return SUCCESS;
  1716. }
  1717. /*
  1718. * Local variables:
  1719. * tab-width: 4
  1720. * c-basic-offset: 4
  1721. * indent-tabs-mode: t
  1722. * End:
  1723. */