mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-06 06:38:20 +00:00
Fix possible utf16 out of bounds issue
This commit is contained in:
@@ -465,7 +465,7 @@ get_computer_name_and_account_sid :: proc(username: string) -> (computer_name: s
|
||||
return "", {}, false
|
||||
}
|
||||
|
||||
cname_w := make([]u16, computer_name_size context.temp_allocator)
|
||||
cname_w := make([]u16, computer_name_size, context.temp_allocator)
|
||||
|
||||
res = LookupAccountNameW(
|
||||
nil,
|
||||
|
||||
@@ -39,19 +39,19 @@ encode :: proc "contextless" (d: []u16, s: []rune) -> int {
|
||||
loop: for r in s {
|
||||
switch r {
|
||||
case 0..<_surr1, _surr3 ..< _surr_self:
|
||||
if m+1 < n { break loop }
|
||||
if n >= m { break loop }
|
||||
d[n] = u16(r)
|
||||
n += 1
|
||||
|
||||
case _surr_self ..= MAX_RUNE:
|
||||
if m+2 < n { break loop }
|
||||
if n+1 >= m { break loop }
|
||||
r1, r2 := encode_surrogate_pair(r)
|
||||
d[n] = u16(r1)
|
||||
d[n+1] = u16(r2)
|
||||
n += 2
|
||||
|
||||
case:
|
||||
if m+1 < n { break loop }
|
||||
if n >= m { break loop }
|
||||
d[n] = u16(REPLACEMENT_CHAR)
|
||||
n += 1
|
||||
}
|
||||
@@ -65,19 +65,19 @@ encode_string :: proc "contextless" (d: []u16, s: string) -> int {
|
||||
loop: for r in s {
|
||||
switch r {
|
||||
case 0..<_surr1, _surr3 ..< _surr_self:
|
||||
if m+1 < n { break loop }
|
||||
if n >= m { break loop }
|
||||
d[n] = u16(r)
|
||||
n += 1
|
||||
|
||||
case _surr_self ..= MAX_RUNE:
|
||||
if m+2 < n { break loop }
|
||||
if n+1 >= m { break loop }
|
||||
r1, r2 := encode_surrogate_pair(r)
|
||||
d[n] = u16(r1)
|
||||
d[n+1] = u16(r2)
|
||||
n += 2
|
||||
|
||||
case:
|
||||
if m+1 < n { break loop }
|
||||
if n >= m { break loop }
|
||||
d[n] = u16(REPLACEMENT_CHAR)
|
||||
n += 1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user