浏览代码

rtl-extra: fix StrToHostAddr to not accept numbers outside of byte value range by silently wrapping them to a byte

git-svn-id: trunk@44845 -
Károly Balogh 5 年之前
父节点
当前提交
0d22ee477a
共有 1 个文件被更改,包括 7 次插入2 次删除
  1. 7 2
      packages/rtl-extra/src/inc/sockets.inc

+ 7 - 2
packages/rtl-extra/src/inc/sockets.inc

@@ -323,8 +323,13 @@ begin
        else
        else
          Dummy:=IP;
          Dummy:=IP;
       Val (Dummy,k,J);
       Val (Dummy,k,J);
-      array4int(temp.s_addr)[i]:=k;
-      If J<>0 then Exit;
+      If J<>0 then
+        exit;
+      array4int(temp.s_addr)[i]:=byte(k);
+      { check if after wrapping to a byte, our number is
+        still the same. if not, it can't be part of an IP. }
+      If array4int(temp.s_addr)[i]<>k then
+        exit;
    end;
    end;
    strtohostaddr.s_addr:=ntohl(Temp.s_addr);
    strtohostaddr.s_addr:=ntohl(Temp.s_addr);
 end;
 end;