Make WordPress Core

Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#11620 closed defect (bug) (fixed)

Upload Handling. Use is_numeric instead of ctype_digit.

Reported by: markup Owned by:
Milestone: 2.9.1 Priority: high
Severity: normal Version: 2.9
Component: Upload Keywords: has-patch commit
Focuses: Cc:


The function ctype_digit() is used in wp_handle_upload() in /wp-admin/includes/file.php

Please, replace with is_numeric().

Attachments (1)

file.diff (622 bytes) - added by markup 5 years ago.

Download all attachments as: .zip

Change History (11)

@markup5 years ago

comment:1 follow-up: @scribu5 years ago

  • Keywords has-patch added
  • Milestone changed from Unassigned to 3.0
  • Type changed from defect (bug) to enhancement

Could you give a reason why you want this change to be made?

comment:2 in reply to: ↑ 1 ; follow-up: @markup5 years ago

  • Cc eval@… added

Replying to scribu:

Could you give a reason why you want this change to be made?

is_numeric() is a standard function for php version 4 and 5, while ctype_digit() is avaliable only in the "ctype" extension, which may have no support at all. In WordPress they refused ctype starting from the version 2.5.1, see for reference http://core.trac.wordpress.org/search?q=ctype_digit

And now if the "ctype" extension is missing on the server, a WP user can't upload media in wordPress through the administration panel. Perhaps you should add this enhancement to 2.9.1 or 2.9.2 milestone.

For those user, that already have the same problem, I propose use the following snippet in the template functions.php

if(!finction_exists('ctype_digit')) {
 function ctype_digit( $num ) { return is_numeric( $num ); }

comment:3 in reply to: ↑ 2 @markup5 years ago

Replying to markup:

Sorry. This one is correct.

if(!function_exists('ctype_digit')) {
 function ctype_digit( $num ) { return is_numeric( $num ); }

comment:4 @scribu5 years ago

A very good reason, but I don't think it will make it in 2.9.1.

Knowing the percentage of WP users that don't have the ctype extension would help in determining the severity of the issue.

comment:5 @scribu5 years ago

  • Keywords commit added

It seems this has been an issue before: #6534

comment:6 @nacin5 years ago

  • Milestone changed from 3.0 to 2.9.1
  • Type changed from enhancement to defect (bug)

This should be 2.9.1, as this was introduced in 2.9 and therefore is a regression from 2.8.

Replying to markup:


We would generally add those functions to compat.php. A plugin author could use it without knowing the ramifications, but at the same time, I don't think we currently account for any functions from extensions.

I grepped core and could not find another ctype_* function in use.

comment:7 @automattor5 years ago

  • Resolution set to fixed
  • Status changed from new to closed

(In [12545]) Replace ctype_digit() with is_numeric() for better compatibility, props markup, fixes #11620 for 2.9

comment:8 @azaozz5 years ago

And in [12544] for trunk.

comment:9 @hakre5 years ago

keep in mind that ctype_digit() does something else than is_numeric(). is_numeric is true for +0123.45e6 or 0xFF.

comment:10 @azaozz5 years ago

In this case it only needs to check for numbers 0-8 returned as errors when uploading a file.

Note: See TracTickets for help on using tickets.