rfc:octal.overload-checking

This is an old revision of the document!


PHP RFC: Fix overflow in octal parsing

Introduction

Parsing of Octal (base 8) numbers contained in an interpolated string currently matches the pattern \\[0-7]{1,3}, that is a backslash followed by between one and three octits (numbers with an ordinal value between zero and seven). However, in order for a 3 octit number to fit within the space of a single character (one byte), the first octit is actually limited to base 4 (values from 0 to 3).

Currently, PHP does not guard against an overflow in the first octit of a 3 octit octal value, instead allowing the value to silently overflow without warning. Thus “\000” === “\400”, “\100” === “\500”, “\200” === “\600”, and “\300” === “\700”, and so on...

Proposal

This RFC seeks to decide which approach to take in addressing this undesired behavior.

  1. Do nothing. Some terrible application is relying on this behavior and there's no burning need to fix it.
  2. Retain the current overflow behavior, but raise a compile-time warning “Octal escape sequence overflow {} is greater than \\377”
  3. Limit octal numbers to \\[0-3]?[0-7]{0,2} meaning that sequences like “\456” would be parsed as octal 45 (decimal 37, e.g. a '%' character) followed by a literal 6

Options 2 and 3 may involve a deprecation/warning period followed by a permanent change.

Update: Between minimal comment and a lack of severity of this case. I've opted to initiate a vote for option 2. Produce a compile-time warning about value overflow.

Backward Incompatible Changes

New compile-time warning is raised on overflow during interpolation.

Proposed PHP Version(s)

7.1

Vote

Required 50% + 1 Voting Opened: 2016-04-29 21:30 UTC Closes: 2016-05-13 23:59 UTC

Raise warning on octal interpolation overflow?
Real name Yes No
ajf  
bwoebi  
cmb  
colinodell  
daverandom  
davey  
derick  
francois  
galvao  
guilhermeblanco  
jhdxr  
kalle  
kguest  
kinncj  
leigh  
lstrojny  
malukenho  
mariano  
mbeccati  
mcmic  
mgocobachi  
mightyuhu  
nikic  
ocramius  
pierrick  
pollita  
rasmus  
rdohms  
rmf  
sammyk  
santiagolizardo  
svpernova09  
thorstenr  
till  
treffynnon  
trowski  
yohgaki  
zimt  
Count: 37 1

References

rfc/octal.overload-checking.1461968487.txt.gz · Last modified: (external edit)