Last active
January 7, 2019 01:45
-
-
Save smalyshev/2b4a3c7d838e81f45f813090fe4db5ad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/ext/mbstring/oniguruma/enc/utf16_be.c b/ext/mbstring/oniguruma/enc/utf16_be.c | |
index 1e909ebbf2..9e2f73b073 100644 | |
--- a/ext/mbstring/oniguruma/enc/utf16_be.c | |
+++ b/ext/mbstring/oniguruma/enc/utf16_be.c | |
@@ -75,16 +75,18 @@ utf16be_is_mbc_newline(const UChar* p, const UChar* end) | |
} | |
static OnigCodePoint | |
-utf16be_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED) | |
+utf16be_mbc_to_code(const UChar* p, const UChar* end) | |
{ | |
OnigCodePoint code; | |
if (UTF16_IS_SURROGATE_FIRST(*p)) { | |
+ if (end - p < 4) return 0; | |
code = ((((p[0] - 0xd8) << 2) + ((p[1] & 0xc0) >> 6) + 1) << 16) | |
+ ((((p[1] & 0x3f) << 2) + (p[2] - 0xdc)) << 8) | |
+ p[3]; | |
} | |
else { | |
+ if (end - p < 2) return 0; | |
code = p[0] * 256 + p[1]; | |
} | |
return code; | |
diff --git a/ext/mbstring/oniguruma/enc/utf16_le.c b/ext/mbstring/oniguruma/enc/utf16_le.c | |
index 5cc0759117..580f8dffa2 100644 | |
--- a/ext/mbstring/oniguruma/enc/utf16_le.c | |
+++ b/ext/mbstring/oniguruma/enc/utf16_le.c | |
@@ -81,13 +81,14 @@ utf16le_is_mbc_newline(const UChar* p, const UChar* end) | |
} | |
static OnigCodePoint | |
-utf16le_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED) | |
+utf16le_mbc_to_code(const UChar* p, const UChar* end) | |
{ | |
OnigCodePoint code; | |
UChar c0 = *p; | |
UChar c1 = *(p+1); | |
if (UTF16_IS_SURROGATE_FIRST(c1)) { | |
+ if (end - p < 4) return 0; | |
code = ((((c1 - 0xd8) << 2) + ((c0 & 0xc0) >> 6) + 1) << 16) | |
+ ((((c0 & 0x3f) << 2) + (p[3] - 0xdc)) << 8) | |
+ p[2]; | |
diff --git a/ext/mbstring/oniguruma/enc/utf32_be.c b/ext/mbstring/oniguruma/enc/utf32_be.c | |
index b4f822607c..5295f26b1e 100644 | |
--- a/ext/mbstring/oniguruma/enc/utf32_be.c | |
+++ b/ext/mbstring/oniguruma/enc/utf32_be.c | |
@@ -60,6 +60,7 @@ utf32be_is_mbc_newline(const UChar* p, const UChar* end) | |
static OnigCodePoint | |
utf32be_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED) | |
{ | |
+ if (end - p < 4) return 0; | |
return (OnigCodePoint )(((p[0] * 256 + p[1]) * 256 + p[2]) * 256 + p[3]); | |
} | |
diff --git a/ext/mbstring/oniguruma/enc/utf32_le.c b/ext/mbstring/oniguruma/enc/utf32_le.c | |
index 8f413bfc74..a78c4d0abc 100644 | |
--- a/ext/mbstring/oniguruma/enc/utf32_le.c | |
+++ b/ext/mbstring/oniguruma/enc/utf32_le.c | |
@@ -60,6 +60,7 @@ utf32le_is_mbc_newline(const UChar* p, const UChar* end) | |
static OnigCodePoint | |
utf32le_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED) | |
{ | |
+ if (end - p < 4) return 0; | |
return (OnigCodePoint )(((p[3] * 256 + p[2]) * 256 + p[1]) * 256 + p[0]); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment