]> Cypherpunks repositories - gostls13.git/commitdiff
internal/syscall/windows/registry: handle invalid integer values
authorPatrick Mezard <patrick@mezard.eu>
Sat, 9 May 2015 13:44:58 +0000 (15:44 +0200)
committerAlex Brainman <alex.brainman@gmail.com>
Mon, 11 May 2015 06:18:59 +0000 (06:18 +0000)
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 <alex.brainman@gmail.com>
src/internal/syscall/windows/registry/value.go

index b2b28aadf8ac572177113bd52104493c29d9020b..814fe445b9be16f20a144dcf999831fefeca6714 100644 (file)
@@ -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