RemovedFunctionsSniff.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104
  1. <?php
  2. /**
  3. * PHPCompatibility, an external standard for PHP_CodeSniffer.
  4. *
  5. * @package PHPCompatibility
  6. * @copyright 2012-2019 PHPCompatibility Contributors
  7. * @license https://opensource.org/licenses/LGPL-3.0 LGPL3
  8. * @link https://github.com/PHPCompatibility/PHPCompatibility
  9. */
  10. namespace PHPCompatibility\Sniffs\FunctionUse;
  11. use PHPCompatibility\AbstractRemovedFeatureSniff;
  12. use PHP_CodeSniffer_File as File;
  13. /**
  14. * Detect calls to deprecated/removed native PHP functions.
  15. *
  16. * Suggests alternative if available.
  17. *
  18. * PHP version All
  19. *
  20. * @since 5.5
  21. * @since 5.6 Now extends the base `Sniff` class instead of the upstream
  22. * `Generic.PHP.ForbiddenFunctions` sniff.
  23. * @since 7.1.0 Now extends the `AbstractRemovedFeatureSniff` instead of the base `Sniff` class.
  24. * @since 9.0.0 Renamed from `DeprecatedFunctionsSniff` to `RemovedFunctionsSniff`.
  25. */
  26. class RemovedFunctionsSniff extends AbstractRemovedFeatureSniff
  27. {
  28. /**
  29. * A list of deprecated and removed functions with their alternatives.
  30. *
  31. * The array lists : version number with false (deprecated) or true (removed) and an alternative function.
  32. * If no alternative exists, it is NULL, i.e, the function should just not be used.
  33. *
  34. * @since 5.5
  35. * @since 5.6 Visibility changed from `protected` to `public`.
  36. * @since 7.0.2 Visibility changed back from `public` to `protected`.
  37. * The earlier change was made to be in line with the upstream sniff,
  38. * but that sniff is no longer being extended.
  39. * @since 7.0.8 Property renamed from `$forbiddenFunctions` to `$removedFunctions`.
  40. *
  41. * @var array(string => array(string => bool|string|null))
  42. */
  43. protected $removedFunctions = array(
  44. 'php_check_syntax' => array(
  45. '5.0.5' => true,
  46. 'alternative' => null,
  47. ),
  48. 'pfpro_cleanup' => array(
  49. '5.1' => true,
  50. 'alternative' => null,
  51. ),
  52. 'pfpro_init' => array(
  53. '5.1' => true,
  54. 'alternative' => null,
  55. ),
  56. 'pfpro_process_raw' => array(
  57. '5.1' => true,
  58. 'alternative' => null,
  59. ),
  60. 'pfpro_process' => array(
  61. '5.1' => true,
  62. 'alternative' => null,
  63. ),
  64. 'pfpro_version' => array(
  65. '5.1' => true,
  66. 'alternative' => null,
  67. ),
  68. 'call_user_method' => array(
  69. '5.3' => false,
  70. '7.0' => true,
  71. 'alternative' => 'call_user_func()',
  72. ),
  73. 'call_user_method_array' => array(
  74. '5.3' => false,
  75. '7.0' => true,
  76. 'alternative' => 'call_user_func_array()',
  77. ),
  78. 'define_syslog_variables' => array(
  79. '5.3' => false,
  80. '5.4' => true,
  81. 'alternative' => null,
  82. ),
  83. 'dl' => array(
  84. '5.3' => false,
  85. 'alternative' => null,
  86. ),
  87. 'ereg' => array(
  88. '5.3' => false,
  89. '7.0' => true,
  90. 'alternative' => 'preg_match()',
  91. ),
  92. 'ereg_replace' => array(
  93. '5.3' => false,
  94. '7.0' => true,
  95. 'alternative' => 'preg_replace()',
  96. ),
  97. 'eregi' => array(
  98. '5.3' => false,
  99. '7.0' => true,
  100. 'alternative' => 'preg_match()',
  101. ),
  102. 'eregi_replace' => array(
  103. '5.3' => false,
  104. '7.0' => true,
  105. 'alternative' => 'preg_replace()',
  106. ),
  107. 'imagepsbbox' => array(
  108. '7.0' => true,
  109. 'alternative' => null,
  110. ),
  111. 'imagepsencodefont' => array(
  112. '7.0' => true,
  113. 'alternative' => null,
  114. ),
  115. 'imagepsextendfont' => array(
  116. '7.0' => true,
  117. 'alternative' => null,
  118. ),
  119. 'imagepsfreefont' => array(
  120. '7.0' => true,
  121. 'alternative' => null,
  122. ),
  123. 'imagepsloadfont' => array(
  124. '7.0' => true,
  125. 'alternative' => null,
  126. ),
  127. 'imagepsslantfont' => array(
  128. '7.0' => true,
  129. 'alternative' => null,
  130. ),
  131. 'imagepstext' => array(
  132. '7.0' => true,
  133. 'alternative' => null,
  134. ),
  135. 'import_request_variables' => array(
  136. '5.3' => false,
  137. '5.4' => true,
  138. 'alternative' => null,
  139. ),
  140. 'ldap_sort' => array(
  141. '7.0' => false,
  142. 'alternative' => null,
  143. ),
  144. 'mcrypt_generic_end' => array(
  145. '5.3' => false,
  146. '7.0' => true,
  147. 'alternative' => 'mcrypt_generic_deinit()',
  148. ),
  149. 'mysql_db_query' => array(
  150. '5.3' => false,
  151. '7.0' => true,
  152. 'alternative' => 'mysqli::select_db() and mysqli::query()',
  153. ),
  154. 'mysql_escape_string' => array(
  155. '5.3' => false,
  156. '7.0' => true,
  157. 'alternative' => 'mysqli::real_escape_string()',
  158. ),
  159. 'mysql_list_dbs' => array(
  160. '5.4' => false,
  161. '7.0' => true,
  162. 'alternative' => null,
  163. ),
  164. 'mysqli_bind_param' => array(
  165. '5.3' => false,
  166. '5.4' => true,
  167. 'alternative' => 'mysqli_stmt::bind_param()',
  168. ),
  169. 'mysqli_bind_result' => array(
  170. '5.3' => false,
  171. '5.4' => true,
  172. 'alternative' => 'mysqli_stmt::bind_result()',
  173. ),
  174. 'mysqli_client_encoding' => array(
  175. '5.3' => false,
  176. '5.4' => true,
  177. 'alternative' => 'mysqli::character_set_name()',
  178. ),
  179. 'mysqli_fetch' => array(
  180. '5.3' => false,
  181. '5.4' => true,
  182. 'alternative' => 'mysqli_stmt::fetch()',
  183. ),
  184. 'mysqli_param_count' => array(
  185. '5.3' => false,
  186. '5.4' => true,
  187. 'alternative' => 'mysqli_stmt_param_count()',
  188. ),
  189. 'mysqli_get_metadata' => array(
  190. '5.3' => false,
  191. '5.4' => true,
  192. 'alternative' => 'mysqli_stmt::result_metadata()',
  193. ),
  194. 'mysqli_send_long_data' => array(
  195. '5.3' => false,
  196. '5.4' => true,
  197. 'alternative' => 'mysqli_stmt::send_long_data()',
  198. ),
  199. 'magic_quotes_runtime' => array(
  200. '5.3' => false,
  201. '7.0' => true,
  202. 'alternative' => null,
  203. ),
  204. 'session_register' => array(
  205. '5.3' => false,
  206. '5.4' => true,
  207. 'alternative' => '$_SESSION',
  208. ),
  209. 'session_unregister' => array(
  210. '5.3' => false,
  211. '5.4' => true,
  212. 'alternative' => '$_SESSION',
  213. ),
  214. 'session_is_registered' => array(
  215. '5.3' => false,
  216. '5.4' => true,
  217. 'alternative' => '$_SESSION',
  218. ),
  219. 'set_magic_quotes_runtime' => array(
  220. '5.3' => false,
  221. '7.0' => true,
  222. 'alternative' => null,
  223. ),
  224. 'set_socket_blocking' => array(
  225. '5.3' => false,
  226. '7.0' => true,
  227. 'alternative' => 'stream_set_blocking()',
  228. ),
  229. 'split' => array(
  230. '5.3' => false,
  231. '7.0' => true,
  232. 'alternative' => 'preg_split()',
  233. ),
  234. 'spliti' => array(
  235. '5.3' => false,
  236. '7.0' => true,
  237. 'alternative' => 'preg_split()',
  238. ),
  239. 'sql_regcase' => array(
  240. '5.3' => false,
  241. '7.0' => true,
  242. 'alternative' => null,
  243. ),
  244. 'php_logo_guid' => array(
  245. '5.5' => true,
  246. 'alternative' => null,
  247. ),
  248. 'php_egg_logo_guid' => array(
  249. '5.5' => true,
  250. 'alternative' => null,
  251. ),
  252. 'php_real_logo_guid' => array(
  253. '5.5' => true,
  254. 'alternative' => null,
  255. ),
  256. 'zend_logo_guid' => array(
  257. '5.5' => true,
  258. 'alternative' => null,
  259. ),
  260. 'datefmt_set_timezone_id' => array(
  261. '5.5' => false,
  262. '7.0' => true,
  263. 'alternative' => 'IntlDateFormatter::setTimeZone()',
  264. ),
  265. 'mcrypt_ecb' => array(
  266. '5.5' => false,
  267. '7.0' => true,
  268. 'alternative' => null,
  269. ),
  270. 'mcrypt_cbc' => array(
  271. '5.5' => false,
  272. '7.0' => true,
  273. 'alternative' => null,
  274. ),
  275. 'mcrypt_cfb' => array(
  276. '5.5' => false,
  277. '7.0' => true,
  278. 'alternative' => null,
  279. ),
  280. 'mcrypt_ofb' => array(
  281. '5.5' => false,
  282. '7.0' => true,
  283. 'alternative' => null,
  284. ),
  285. 'ocibindbyname' => array(
  286. '5.4' => false,
  287. 'alternative' => 'oci_bind_by_name()',
  288. ),
  289. 'ocicancel' => array(
  290. '5.4' => false,
  291. 'alternative' => 'oci_cancel()',
  292. ),
  293. 'ocicloselob' => array(
  294. '5.4' => false,
  295. 'alternative' => 'OCI-Lob::close()',
  296. ),
  297. 'ocicollappend' => array(
  298. '5.4' => false,
  299. 'alternative' => 'OCI-Collection::append()',
  300. ),
  301. 'ocicollassign' => array(
  302. '5.4' => false,
  303. 'alternative' => 'OCI-Collection::assign()',
  304. ),
  305. 'ocicollassignelem' => array(
  306. '5.4' => false,
  307. 'alternative' => 'OCI-Collection::assignElem()',
  308. ),
  309. 'ocicollgetelem' => array(
  310. '5.4' => false,
  311. 'alternative' => 'OCI-Collection::getElem()',
  312. ),
  313. 'ocicollmax' => array(
  314. '5.4' => false,
  315. 'alternative' => 'OCI-Collection::max()',
  316. ),
  317. 'ocicollsize' => array(
  318. '5.4' => false,
  319. 'alternative' => 'OCI-Collection::size()',
  320. ),
  321. 'ocicolltrim' => array(
  322. '5.4' => false,
  323. 'alternative' => 'OCI-Collection::trim()',
  324. ),
  325. 'ocicolumnisnull' => array(
  326. '5.4' => false,
  327. 'alternative' => 'oci_field_is_null()',
  328. ),
  329. 'ocicolumnname' => array(
  330. '5.4' => false,
  331. 'alternative' => 'oci_field_name()',
  332. ),
  333. 'ocicolumnprecision' => array(
  334. '5.4' => false,
  335. 'alternative' => 'oci_field_precision()',
  336. ),
  337. 'ocicolumnscale' => array(
  338. '5.4' => false,
  339. 'alternative' => 'oci_field_scale()',
  340. ),
  341. 'ocicolumnsize' => array(
  342. '5.4' => false,
  343. 'alternative' => 'oci_field_size()',
  344. ),
  345. 'ocicolumntype' => array(
  346. '5.4' => false,
  347. 'alternative' => 'oci_field_type()',
  348. ),
  349. 'ocicolumntyperaw' => array(
  350. '5.4' => false,
  351. 'alternative' => 'oci_field_type_raw()',
  352. ),
  353. 'ocicommit' => array(
  354. '5.4' => false,
  355. 'alternative' => 'oci_commit()',
  356. ),
  357. 'ocidefinebyname' => array(
  358. '5.4' => false,
  359. 'alternative' => 'oci_define_by_name()',
  360. ),
  361. 'ocierror' => array(
  362. '5.4' => false,
  363. 'alternative' => 'oci_error()',
  364. ),
  365. 'ociexecute' => array(
  366. '5.4' => false,
  367. 'alternative' => 'oci_execute()',
  368. ),
  369. 'ocifetch' => array(
  370. '5.4' => false,
  371. 'alternative' => 'oci_fetch()',
  372. ),
  373. 'ocifetchinto' => array(
  374. '5.4' => false,
  375. 'alternative' => null,
  376. ),
  377. 'ocifetchstatement' => array(
  378. '5.4' => false,
  379. 'alternative' => 'oci_fetch_all()',
  380. ),
  381. 'ocifreecollection' => array(
  382. '5.4' => false,
  383. 'alternative' => 'OCI-Collection::free()',
  384. ),
  385. 'ocifreecursor' => array(
  386. '5.4' => false,
  387. 'alternative' => 'oci_free_statement()',
  388. ),
  389. 'ocifreedesc' => array(
  390. '5.4' => false,
  391. 'alternative' => 'OCI-Lob::free()',
  392. ),
  393. 'ocifreestatement' => array(
  394. '5.4' => false,
  395. 'alternative' => 'oci_free_statement()',
  396. ),
  397. 'ociinternaldebug' => array(
  398. '5.4' => false,
  399. 'alternative' => 'oci_internal_debug()',
  400. ),
  401. 'ociloadlob' => array(
  402. '5.4' => false,
  403. 'alternative' => 'OCI-Lob::load()',
  404. ),
  405. 'ocilogoff' => array(
  406. '5.4' => false,
  407. 'alternative' => 'oci_close()',
  408. ),
  409. 'ocilogon' => array(
  410. '5.4' => false,
  411. 'alternative' => 'oci_connect()',
  412. ),
  413. 'ocinewcollection' => array(
  414. '5.4' => false,
  415. 'alternative' => 'oci_new_collection()',
  416. ),
  417. 'ocinewcursor' => array(
  418. '5.4' => false,
  419. 'alternative' => 'oci_new_cursor()',
  420. ),
  421. 'ocinewdescriptor' => array(
  422. '5.4' => false,
  423. 'alternative' => 'oci_new_descriptor()',
  424. ),
  425. 'ocinlogon' => array(
  426. '5.4' => false,
  427. 'alternative' => 'oci_new_connect()',
  428. ),
  429. 'ocinumcols' => array(
  430. '5.4' => false,
  431. 'alternative' => 'oci_num_fields()',
  432. ),
  433. 'ociparse' => array(
  434. '5.4' => false,
  435. 'alternative' => 'oci_parse()',
  436. ),
  437. 'ociplogon' => array(
  438. '5.4' => false,
  439. 'alternative' => 'oci_pconnect()',
  440. ),
  441. 'ociresult' => array(
  442. '5.4' => false,
  443. 'alternative' => 'oci_result()',
  444. ),
  445. 'ocirollback' => array(
  446. '5.4' => false,
  447. 'alternative' => 'oci_rollback()',
  448. ),
  449. 'ocirowcount' => array(
  450. '5.4' => false,
  451. 'alternative' => 'oci_num_rows()',
  452. ),
  453. 'ocisavelob' => array(
  454. '5.4' => false,
  455. 'alternative' => 'OCI-Lob::save()',
  456. ),
  457. 'ocisavelobfile' => array(
  458. '5.4' => false,
  459. 'alternative' => 'OCI-Lob::import()',
  460. ),
  461. 'ociserverversion' => array(
  462. '5.4' => false,
  463. 'alternative' => 'oci_server_version()',
  464. ),
  465. 'ocisetprefetch' => array(
  466. '5.4' => false,
  467. 'alternative' => 'oci_set_prefetch()',
  468. ),
  469. 'ocistatementtype' => array(
  470. '5.4' => false,
  471. 'alternative' => 'oci_statement_type()',
  472. ),
  473. 'ociwritelobtofile' => array(
  474. '5.4' => false,
  475. 'alternative' => 'OCI-Lob::export()',
  476. ),
  477. 'ociwritetemporarylob' => array(
  478. '5.4' => false,
  479. 'alternative' => 'OCI-Lob::writeTemporary()',
  480. ),
  481. 'mysqli_get_cache_stats' => array(
  482. '5.4' => true,
  483. 'alternative' => null,
  484. ),
  485. 'mcrypt_create_iv' => array(
  486. '7.1' => false,
  487. '7.2' => true,
  488. 'alternative' => 'random_bytes() or OpenSSL',
  489. ),
  490. 'mcrypt_decrypt' => array(
  491. '7.1' => false,
  492. '7.2' => true,
  493. 'alternative' => 'OpenSSL',
  494. ),
  495. 'mcrypt_enc_get_algorithms_name' => array(
  496. '7.1' => false,
  497. '7.2' => true,
  498. 'alternative' => 'OpenSSL',
  499. ),
  500. 'mcrypt_enc_get_block_size' => array(
  501. '7.1' => false,
  502. '7.2' => true,
  503. 'alternative' => 'OpenSSL',
  504. ),
  505. 'mcrypt_enc_get_iv_size' => array(
  506. '7.1' => false,
  507. '7.2' => true,
  508. 'alternative' => 'OpenSSL',
  509. ),
  510. 'mcrypt_enc_get_key_size' => array(
  511. '7.1' => false,
  512. '7.2' => true,
  513. 'alternative' => 'OpenSSL',
  514. ),
  515. 'mcrypt_enc_get_modes_name' => array(
  516. '7.1' => false,
  517. '7.2' => true,
  518. 'alternative' => 'OpenSSL',
  519. ),
  520. 'mcrypt_enc_get_supported_key_sizes' => array(
  521. '7.1' => false,
  522. '7.2' => true,
  523. 'alternative' => 'OpenSSL',
  524. ),
  525. 'mcrypt_enc_is_block_algorithm_mode' => array(
  526. '7.1' => false,
  527. '7.2' => true,
  528. 'alternative' => 'OpenSSL',
  529. ),
  530. 'mcrypt_enc_is_block_algorithm' => array(
  531. '7.1' => false,
  532. '7.2' => true,
  533. 'alternative' => 'OpenSSL',
  534. ),
  535. 'mcrypt_enc_is_block_mode' => array(
  536. '7.1' => false,
  537. '7.2' => true,
  538. 'alternative' => 'OpenSSL',
  539. ),
  540. 'mcrypt_enc_self_test' => array(
  541. '7.1' => false,
  542. '7.2' => true,
  543. 'alternative' => 'OpenSSL',
  544. ),
  545. 'mcrypt_encrypt' => array(
  546. '7.1' => false,
  547. '7.2' => true,
  548. 'alternative' => 'OpenSSL',
  549. ),
  550. 'mcrypt_generic_deinit' => array(
  551. '7.1' => false,
  552. '7.2' => true,
  553. 'alternative' => 'OpenSSL',
  554. ),
  555. 'mcrypt_generic_init' => array(
  556. '7.1' => false,
  557. '7.2' => true,
  558. 'alternative' => 'OpenSSL',
  559. ),
  560. 'mcrypt_generic' => array(
  561. '7.1' => false,
  562. '7.2' => true,
  563. 'alternative' => 'OpenSSL',
  564. ),
  565. 'mcrypt_get_block_size' => array(
  566. '7.1' => false,
  567. '7.2' => true,
  568. 'alternative' => 'OpenSSL',
  569. ),
  570. 'mcrypt_get_cipher_name' => array(
  571. '7.1' => false,
  572. '7.2' => true,
  573. 'alternative' => 'OpenSSL',
  574. ),
  575. 'mcrypt_get_iv_size' => array(
  576. '7.1' => false,
  577. '7.2' => true,
  578. 'alternative' => 'OpenSSL',
  579. ),
  580. 'mcrypt_get_key_size' => array(
  581. '7.1' => false,
  582. '7.2' => true,
  583. 'alternative' => 'OpenSSL',
  584. ),
  585. 'mcrypt_list_algorithms' => array(
  586. '7.1' => false,
  587. '7.2' => true,
  588. 'alternative' => 'OpenSSL',
  589. ),
  590. 'mcrypt_list_modes' => array(
  591. '7.1' => false,
  592. '7.2' => true,
  593. 'alternative' => 'OpenSSL',
  594. ),
  595. 'mcrypt_module_close' => array(
  596. '7.1' => false,
  597. '7.2' => true,
  598. 'alternative' => 'OpenSSL',
  599. ),
  600. 'mcrypt_module_get_algo_block_size' => array(
  601. '7.1' => false,
  602. '7.2' => true,
  603. 'alternative' => 'OpenSSL',
  604. ),
  605. 'mcrypt_module_get_algo_key_size' => array(
  606. '7.1' => false,
  607. '7.2' => true,
  608. 'alternative' => 'OpenSSL',
  609. ),
  610. 'mcrypt_module_get_supported_key_sizes' => array(
  611. '7.1' => false,
  612. '7.2' => true,
  613. 'alternative' => 'OpenSSL',
  614. ),
  615. 'mcrypt_module_is_block_algorithm_mode' => array(
  616. '7.1' => false,
  617. '7.2' => true,
  618. 'alternative' => 'OpenSSL',
  619. ),
  620. 'mcrypt_module_is_block_algorithm' => array(
  621. '7.1' => false,
  622. '7.2' => true,
  623. 'alternative' => 'OpenSSL',
  624. ),
  625. 'mcrypt_module_is_block_mode' => array(
  626. '7.1' => false,
  627. '7.2' => true,
  628. 'alternative' => 'OpenSSL',
  629. ),
  630. 'mcrypt_module_open' => array(
  631. '7.1' => false,
  632. '7.2' => true,
  633. 'alternative' => 'OpenSSL',
  634. ),
  635. 'mcrypt_module_self_test' => array(
  636. '7.1' => false,
  637. '7.2' => true,
  638. 'alternative' => 'OpenSSL',
  639. ),
  640. 'mdecrypt_generic' => array(
  641. '7.1' => false,
  642. '7.2' => true,
  643. 'alternative' => 'OpenSSL',
  644. ),
  645. 'jpeg2wbmp' => array(
  646. '7.2' => false,
  647. 'alternative' => 'imagecreatefromjpeg() and imagewbmp()',
  648. ),
  649. 'png2wbmp' => array(
  650. '7.2' => false,
  651. 'alternative' => 'imagecreatefrompng() or imagewbmp()',
  652. ),
  653. 'create_function' => array(
  654. '7.2' => false,
  655. 'alternative' => 'an anonymous function',
  656. ),
  657. 'each' => array(
  658. '7.2' => false,
  659. 'alternative' => 'a foreach loop',
  660. ),
  661. 'gmp_random' => array(
  662. '7.2' => false,
  663. 'alternative' => 'gmp_random_bits() or gmp_random_range()',
  664. ),
  665. 'read_exif_data' => array(
  666. '7.2' => false,
  667. 'alternative' => 'exif_read_data()',
  668. ),
  669. 'image2wbmp' => array(
  670. '7.3' => false,
  671. 'alternative' => 'imagewbmp()',
  672. ),
  673. 'mbregex_encoding' => array(
  674. '7.3' => false,
  675. 'alternative' => 'mb_regex_encoding()',
  676. ),
  677. 'mbereg' => array(
  678. '7.3' => false,
  679. 'alternative' => 'mb_ereg()',
  680. ),
  681. 'mberegi' => array(
  682. '7.3' => false,
  683. 'alternative' => 'mb_eregi()',
  684. ),
  685. 'mbereg_replace' => array(
  686. '7.3' => false,
  687. 'alternative' => 'mb_ereg_replace()',
  688. ),
  689. 'mberegi_replace' => array(
  690. '7.3' => false,
  691. 'alternative' => 'mb_eregi_replace()',
  692. ),
  693. 'mbsplit' => array(
  694. '7.3' => false,
  695. 'alternative' => 'mb_split()',
  696. ),
  697. 'mbereg_match' => array(
  698. '7.3' => false,
  699. 'alternative' => 'mb_ereg_match()',
  700. ),
  701. 'mbereg_search' => array(
  702. '7.3' => false,
  703. 'alternative' => 'mb_ereg_search()',
  704. ),
  705. 'mbereg_search_pos' => array(
  706. '7.3' => false,
  707. 'alternative' => 'mb_ereg_search_pos()',
  708. ),
  709. 'mbereg_search_regs' => array(
  710. '7.3' => false,
  711. 'alternative' => 'mb_ereg_search_regs()',
  712. ),
  713. 'mbereg_search_init' => array(
  714. '7.3' => false,
  715. 'alternative' => 'mb_ereg_search_init()',
  716. ),
  717. 'mbereg_search_getregs' => array(
  718. '7.3' => false,
  719. 'alternative' => 'mb_ereg_search_getregs()',
  720. ),
  721. 'mbereg_search_getpos' => array(
  722. '7.3' => false,
  723. 'alternative' => 'mb_ereg_search_getpos()',
  724. ),
  725. 'mbereg_search_setpos' => array(
  726. '7.3' => false,
  727. 'alternative' => 'mb_ereg_search_setpos()',
  728. ),
  729. 'fgetss' => array(
  730. '7.3' => false,
  731. 'alternative' => null,
  732. ),
  733. 'gzgetss' => array(
  734. '7.3' => false,
  735. 'alternative' => null,
  736. ),
  737. 'convert_cyr_string' => array(
  738. '7.4' => false,
  739. 'alternative' => 'mb_convert_encoding(), iconv() or UConverter',
  740. ),
  741. 'ezmlm_hash' => array(
  742. '7.4' => false,
  743. 'alternative' => null,
  744. ),
  745. 'get_magic_quotes_gpc' => array(
  746. '7.4' => false,
  747. 'alternative' => null,
  748. ),
  749. 'get_magic_quotes_runtime' => array(
  750. '7.4' => false,
  751. 'alternative' => null,
  752. ),
  753. 'hebrevc' => array(
  754. '7.4' => false,
  755. 'alternative' => null,
  756. ),
  757. 'is_real' => array(
  758. '7.4' => false,
  759. 'alternative' => 'is_float()',
  760. ),
  761. 'money_format' => array(
  762. '7.4' => false,
  763. 'alternative' => 'NumberFormatter::formatCurrency()',
  764. ),
  765. 'restore_include_path' => array(
  766. '7.4' => false,
  767. 'alternative' => "ini_restore('include_path')",
  768. ),
  769. 'ibase_add_user' => array(
  770. '7.4' => true,
  771. 'alternative' => null,
  772. ),
  773. 'ibase_affected_rows' => array(
  774. '7.4' => true,
  775. 'alternative' => null,
  776. ),
  777. 'ibase_backup' => array(
  778. '7.4' => true,
  779. 'alternative' => null,
  780. ),
  781. 'ibase_blob_add' => array(
  782. '7.4' => true,
  783. 'alternative' => null,
  784. ),
  785. 'ibase_blob_cancel' => array(
  786. '7.4' => true,
  787. 'alternative' => null,
  788. ),
  789. 'ibase_blob_close' => array(
  790. '7.4' => true,
  791. 'alternative' => null,
  792. ),
  793. 'ibase_blob_create' => array(
  794. '7.4' => true,
  795. 'alternative' => null,
  796. ),
  797. 'ibase_blob_echo' => array(
  798. '7.4' => true,
  799. 'alternative' => null,
  800. ),
  801. 'ibase_blob_get' => array(
  802. '7.4' => true,
  803. 'alternative' => null,
  804. ),
  805. 'ibase_blob_import' => array(
  806. '7.4' => true,
  807. 'alternative' => null,
  808. ),
  809. 'ibase_blob_info' => array(
  810. '7.4' => true,
  811. 'alternative' => null,
  812. ),
  813. 'ibase_blob_open' => array(
  814. '7.4' => true,
  815. 'alternative' => null,
  816. ),
  817. 'ibase_close' => array(
  818. '7.4' => true,
  819. 'alternative' => null,
  820. ),
  821. 'ibase_commit_ret' => array(
  822. '7.4' => true,
  823. 'alternative' => null,
  824. ),
  825. 'ibase_commit' => array(
  826. '7.4' => true,
  827. 'alternative' => null,
  828. ),
  829. 'ibase_connect' => array(
  830. '7.4' => true,
  831. 'alternative' => null,
  832. ),
  833. 'ibase_db_info' => array(
  834. '7.4' => true,
  835. 'alternative' => null,
  836. ),
  837. 'ibase_delete_user' => array(
  838. '7.4' => true,
  839. 'alternative' => null,
  840. ),
  841. 'ibase_drop_db' => array(
  842. '7.4' => true,
  843. 'alternative' => null,
  844. ),
  845. 'ibase_errcode' => array(
  846. '7.4' => true,
  847. 'alternative' => null,
  848. ),
  849. 'ibase_errmsg' => array(
  850. '7.4' => true,
  851. 'alternative' => null,
  852. ),
  853. 'ibase_execute' => array(
  854. '7.4' => true,
  855. 'alternative' => null,
  856. ),
  857. 'ibase_fetch_assoc' => array(
  858. '7.4' => true,
  859. 'alternative' => null,
  860. ),
  861. 'ibase_fetch_object' => array(
  862. '7.4' => true,
  863. 'alternative' => null,
  864. ),
  865. 'ibase_fetch_row' => array(
  866. '7.4' => true,
  867. 'alternative' => null,
  868. ),
  869. 'ibase_field_info' => array(
  870. '7.4' => true,
  871. 'alternative' => null,
  872. ),
  873. 'ibase_free_event_handler' => array(
  874. '7.4' => true,
  875. 'alternative' => null,
  876. ),
  877. 'ibase_free_query' => array(
  878. '7.4' => true,
  879. 'alternative' => null,
  880. ),
  881. 'ibase_free_result' => array(
  882. '7.4' => true,
  883. 'alternative' => null,
  884. ),
  885. 'ibase_gen_id' => array(
  886. '7.4' => true,
  887. 'alternative' => null,
  888. ),
  889. 'ibase_maintain_db' => array(
  890. '7.4' => true,
  891. 'alternative' => null,
  892. ),
  893. 'ibase_modify_user' => array(
  894. '7.4' => true,
  895. 'alternative' => null,
  896. ),
  897. 'ibase_name_result' => array(
  898. '7.4' => true,
  899. 'alternative' => null,
  900. ),
  901. 'ibase_num_fields' => array(
  902. '7.4' => true,
  903. 'alternative' => null,
  904. ),
  905. 'ibase_num_params' => array(
  906. '7.4' => true,
  907. 'alternative' => null,
  908. ),
  909. 'ibase_param_info' => array(
  910. '7.4' => true,
  911. 'alternative' => null,
  912. ),
  913. 'ibase_pconnect' => array(
  914. '7.4' => true,
  915. 'alternative' => null,
  916. ),
  917. 'ibase_prepare' => array(
  918. '7.4' => true,
  919. 'alternative' => null,
  920. ),
  921. 'ibase_query' => array(
  922. '7.4' => true,
  923. 'alternative' => null,
  924. ),
  925. 'ibase_restore' => array(
  926. '7.4' => true,
  927. 'alternative' => null,
  928. ),
  929. 'ibase_rollback_ret' => array(
  930. '7.4' => true,
  931. 'alternative' => null,
  932. ),
  933. 'ibase_rollback' => array(
  934. '7.4' => true,
  935. 'alternative' => null,
  936. ),
  937. 'ibase_server_info' => array(
  938. '7.4' => true,
  939. 'alternative' => null,
  940. ),
  941. 'ibase_service_attach' => array(
  942. '7.4' => true,
  943. 'alternative' => null,
  944. ),
  945. 'ibase_service_detach' => array(
  946. '7.4' => true,
  947. 'alternative' => null,
  948. ),
  949. 'ibase_set_event_handler' => array(
  950. '7.4' => true,
  951. 'alternative' => null,
  952. ),
  953. 'ibase_trans' => array(
  954. '7.4' => true,
  955. 'alternative' => null,
  956. ),
  957. 'ibase_wait_event' => array(
  958. '7.4' => true,
  959. 'alternative' => null,
  960. ),
  961. 'ldap_control_paged_result_response' => array(
  962. '7.4' => false,
  963. 'alternative' => 'ldap_search()',
  964. ),
  965. 'ldap_control_paged_result' => array(
  966. '7.4' => false,
  967. 'alternative' => 'ldap_search()',
  968. ),
  969. 'recode_file' => array(
  970. '7.4' => true,
  971. 'alternative' => 'the iconv or mbstring extension',
  972. ),
  973. 'recode_string' => array(
  974. '7.4' => true,
  975. 'alternative' => 'the iconv or mbstring extension',
  976. ),
  977. 'recode' => array(
  978. '7.4' => true,
  979. 'alternative' => 'the iconv or mbstring extension',
  980. ),
  981. 'wddx_add_vars' => array(
  982. '7.4' => true,
  983. 'alternative' => null,
  984. ),
  985. 'wddx_deserialize' => array(
  986. '7.4' => true,
  987. 'alternative' => null,
  988. ),
  989. 'wddx_packet_end' => array(
  990. '7.4' => true,
  991. 'alternative' => null,
  992. ),
  993. 'wddx_packet_start' => array(
  994. '7.4' => true,
  995. 'alternative' => null,
  996. ),
  997. 'wddx_serialize_value' => array(
  998. '7.4' => true,
  999. 'alternative' => null,
  1000. ),
  1001. 'wddx_serialize_vars' => array(
  1002. '7.4' => true,
  1003. 'alternative' => null,
  1004. ),
  1005. );
  1006. /**
  1007. * Returns an array of tokens this test wants to listen for.
  1008. *
  1009. * @since 5.6
  1010. *
  1011. * @return array
  1012. */
  1013. public function register()
  1014. {
  1015. // Handle case-insensitivity of function names.
  1016. $this->removedFunctions = $this->arrayKeysToLowercase($this->removedFunctions);
  1017. return array(\T_STRING);
  1018. }
  1019. /**
  1020. * Processes this test, when one of its tokens is encountered.
  1021. *
  1022. * @since 5.5
  1023. *
  1024. * @param \PHP_CodeSniffer_File $phpcsFile The file being scanned.
  1025. * @param int $stackPtr The position of the current token in
  1026. * the stack passed in $tokens.
  1027. *
  1028. * @return void
  1029. */
  1030. public function process(File $phpcsFile, $stackPtr)
  1031. {
  1032. $tokens = $phpcsFile->getTokens();
  1033. $ignore = array(
  1034. \T_DOUBLE_COLON => true,
  1035. \T_OBJECT_OPERATOR => true,
  1036. \T_FUNCTION => true,
  1037. \T_CLASS => true,
  1038. \T_CONST => true,
  1039. \T_USE => true,
  1040. \T_NS_SEPARATOR => true,
  1041. );
  1042. $prevToken = $phpcsFile->findPrevious(\T_WHITESPACE, ($stackPtr - 1), null, true);
  1043. if (isset($ignore[$tokens[$prevToken]['code']]) === true) {
  1044. // Not a call to a PHP function.
  1045. return;
  1046. }
  1047. $function = $tokens[$stackPtr]['content'];
  1048. $functionLc = strtolower($function);
  1049. if (isset($this->removedFunctions[$functionLc]) === false) {
  1050. return;
  1051. }
  1052. $itemInfo = array(
  1053. 'name' => $function,
  1054. 'nameLc' => $functionLc,
  1055. );
  1056. $this->handleFeature($phpcsFile, $stackPtr, $itemInfo);
  1057. }
  1058. /**
  1059. * Get the relevant sub-array for a specific item from a multi-dimensional array.
  1060. *
  1061. * @since 7.1.0
  1062. *
  1063. * @param array $itemInfo Base information about the item.
  1064. *
  1065. * @return array Version and other information about the item.
  1066. */
  1067. public function getItemArray(array $itemInfo)
  1068. {
  1069. return $this->removedFunctions[$itemInfo['nameLc']];
  1070. }
  1071. /**
  1072. * Get the error message template for this sniff.
  1073. *
  1074. * @since 7.1.0
  1075. *
  1076. * @return string
  1077. */
  1078. protected function getErrorMsgTemplate()
  1079. {
  1080. return 'Function %s() is ';
  1081. }
  1082. }