Skip to content

Commit fd72c05

Browse files
Defensively cap number_of_leading_zeros to prevent OOM
1 parent ac8fa16 commit fd72c05

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

cpp/src/phonenumbers/phonenumberutil.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2678,10 +2678,11 @@ void PhoneNumberUtil::GetNationalSignificantNumber(
26782678
string* national_number) const {
26792679
DCHECK(national_number);
26802680
// If leading zero(s) have been set, we prefix this now. Note this is not a
2681-
// national prefix. Ensure the number of leading zeros is at least 0 so we
2682-
// don't crash in the case of malicious input.
2681+
// national prefix. Defensively cap the number of leading zeros to avoid OOM
2682+
// from malicious input. Ensure the number of leading zeros is at least 0 so
2683+
// we don't crash in the case of malicious input.
26832684
StrAppend(national_number, number.italian_leading_zero() ?
2684-
string(std::max(number.number_of_leading_zeros(), 0), '0') : "");
2685+
string(std::min(std::max(number.number_of_leading_zeros(), 0), 3), '0') : "");
26852686
StrAppend(national_number, number.national_number());
26862687
}
26872688

java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1928,9 +1928,11 @@ public String formatOutOfCountryKeepingAlphaChars(PhoneNumber number,
19281928
*/
19291929
public String getNationalSignificantNumber(PhoneNumber number) {
19301930
// If leading zero(s) have been set, we prefix this now. Note this is not a national prefix.
1931+
// Defensively cap the number of leading zeros to avoid OOM from malicious input.
19311932
StringBuilder nationalNumber = new StringBuilder();
19321933
if (number.isItalianLeadingZero() && number.getNumberOfLeadingZeros() > 0) {
1933-
char[] zeros = new char[number.getNumberOfLeadingZeros()];
1934+
int numberOfLeadingZeros = Math.min(number.getNumberOfLeadingZeros(), 3);
1935+
char[] zeros = new char[numberOfLeadingZeros];
19341936
Arrays.fill(zeros, '0');
19351937
nationalNumber.append(new String(zeros));
19361938
}

0 commit comments

Comments
 (0)