From 4cd9c37b4a85e3068f9ccfe80302cd47ebcee38b Mon Sep 17 00:00:00 2001 From: ghaithabdulreda <167309608+ghaithabdulreda@users.noreply.github.com> Date: Fri, 12 Jun 2026 16:35:01 -0700 Subject: [PATCH 1/4] Defensively cap number_of_leading_zeros to prevent OOM --- cpp/src/phonenumbers/phonenumberutil.cc | 7 ++++--- .../src/com/google/i18n/phonenumbers/PhoneNumberUtil.java | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cpp/src/phonenumbers/phonenumberutil.cc b/cpp/src/phonenumbers/phonenumberutil.cc index c0c9d09a04..85cf16f24e 100644 --- a/cpp/src/phonenumbers/phonenumberutil.cc +++ b/cpp/src/phonenumbers/phonenumberutil.cc @@ -2678,10 +2678,11 @@ void PhoneNumberUtil::GetNationalSignificantNumber( string* national_number) const { DCHECK(national_number); // If leading zero(s) have been set, we prefix this now. Note this is not a - // national prefix. Ensure the number of leading zeros is at least 0 so we - // don't crash in the case of malicious input. + // national prefix. Defensively cap the number of leading zeros to avoid OOM + // from malicious input. Ensure the number of leading zeros is at least 0 so + // we don't crash in the case of malicious input. StrAppend(national_number, number.italian_leading_zero() ? - string(std::max(number.number_of_leading_zeros(), 0), '0') : ""); + string(std::min(std::max(number.number_of_leading_zeros(), 0), 3), '0') : ""); StrAppend(national_number, number.national_number()); } diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index b6de408449..8cd480eb01 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -1928,9 +1928,11 @@ public String formatOutOfCountryKeepingAlphaChars(PhoneNumber number, */ public String getNationalSignificantNumber(PhoneNumber number) { // If leading zero(s) have been set, we prefix this now. Note this is not a national prefix. + // Defensively cap the number of leading zeros to avoid OOM from malicious input. StringBuilder nationalNumber = new StringBuilder(); if (number.isItalianLeadingZero() && number.getNumberOfLeadingZeros() > 0) { - char[] zeros = new char[number.getNumberOfLeadingZeros()]; + int numberOfLeadingZeros = Math.min(number.getNumberOfLeadingZeros(), 3); + char[] zeros = new char[numberOfLeadingZeros]; Arrays.fill(zeros, '0'); nationalNumber.append(new String(zeros)); } From 160ea4f7f9d8e0842891078534e49e27e343f4a3 Mon Sep 17 00:00:00 2001 From: ghaithabdulreda <167309608+ghaithabdulreda@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:36:31 -0700 Subject: [PATCH 2/4] Update leading zeros limit in phone number utility Increase the maximum number of leading zeros from 3 to 10 to handle more cases. --- cpp/src/phonenumbers/phonenumberutil.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/phonenumbers/phonenumberutil.cc b/cpp/src/phonenumbers/phonenumberutil.cc index 85cf16f24e..7e5ce4afd6 100644 --- a/cpp/src/phonenumbers/phonenumberutil.cc +++ b/cpp/src/phonenumbers/phonenumberutil.cc @@ -2682,7 +2682,7 @@ void PhoneNumberUtil::GetNationalSignificantNumber( // from malicious input. Ensure the number of leading zeros is at least 0 so // we don't crash in the case of malicious input. StrAppend(national_number, number.italian_leading_zero() ? - string(std::min(std::max(number.number_of_leading_zeros(), 0), 3), '0') : ""); + string(std::min(std::max(number.number_of_leading_zeros(), 0), 10), '0') : ""); StrAppend(national_number, number.national_number()); } @@ -3297,4 +3297,4 @@ bool PhoneNumberUtil::CanBeInternationallyDialled( } } // namespace phonenumbers -} // namespace i18n \ No newline at end of file +} // namespace i18n From f6ff85f83a1bb5fb249a2638619803e3e7913a8b Mon Sep 17 00:00:00 2001 From: ghaithabdulreda <167309608+ghaithabdulreda@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:37:24 -0700 Subject: [PATCH 3/4] Update PhoneNumberUtil.java --- .../src/com/google/i18n/phonenumbers/PhoneNumberUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index 8cd480eb01..a9b23853f4 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -1931,7 +1931,7 @@ public String getNationalSignificantNumber(PhoneNumber number) { // Defensively cap the number of leading zeros to avoid OOM from malicious input. StringBuilder nationalNumber = new StringBuilder(); if (number.isItalianLeadingZero() && number.getNumberOfLeadingZeros() > 0) { - int numberOfLeadingZeros = Math.min(number.getNumberOfLeadingZeros(), 3); + int numberOfLeadingZeros = Math.min(number.getNumberOfLeadingZeros(), 10); char[] zeros = new char[numberOfLeadingZeros]; Arrays.fill(zeros, '0'); nationalNumber.append(new String(zeros)); From bf489f28f889492ac1a153b68b436c279d3dbcf5 Mon Sep 17 00:00:00 2001 From: ghaithabdulreda <167309608+ghaithabdulreda@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:39:25 -0700 Subject: [PATCH 4/4] Update PhoneNumberUtil.java Increase leading zeros cap to 10