From: Patrick Mezard Date: Sat, 9 May 2015 13:44:58 +0000 (+0200) Subject: internal/syscall/windows/registry: handle invalid integer values X-Git-Tag: go1.5beta1~664 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=19e81a9b3b0d103fe7a9a9605c16eb4ba1f20ed8;p=gostls13.git internal/syscall/windows/registry: handle invalid integer values I have around twenty of such values on a Windows 7 development machine. regedit displays (translated): "invalid 32-bits DWORD value". Change-Id: Ib37a414ee4c85e891b0a25fed2ddad9e105f5f4e Reviewed-on: https://go-review.googlesource.com/9901 Reviewed-by: Alex Brainman --- diff --git a/src/internal/syscall/windows/registry/value.go b/src/internal/syscall/windows/registry/value.go index b2b28aadf8..814fe445b9 100644 --- a/src/internal/syscall/windows/registry/value.go +++ b/src/internal/syscall/windows/registry/value.go @@ -175,8 +175,14 @@ func (k Key) GetIntegerValue(name string) (val uint64, valtype uint32, err error } switch typ { case DWORD: + if len(data) != 4 { + return 0, typ, errors.New("DWORD value is not 4 bytes long") + } return uint64(*(*uint32)(unsafe.Pointer(&data[0]))), DWORD, nil case QWORD: + if len(data) != 8 { + return 0, typ, errors.New("QWORD value is not 8 bytes long") + } return uint64(*(*uint64)(unsafe.Pointer(&data[0]))), QWORD, nil default: return 0, typ, ErrUnexpectedType