Browse Source

Add internalerror if ogwasm tries to write unset Func/Global or TagIndex of TWasmObjSymbol

Pierre Muller 3 years ago
parent
commit
c9e8bfd118
1 changed files with 12 additions and 3 deletions
  1. 12 3
      compiler/ogwasm.pas

+ 12 - 3
compiler/ogwasm.pas

@@ -1025,7 +1025,10 @@ implementation
                       if not assigned(objrel.symbol) then
                       if not assigned(objrel.symbol) then
                         internalerror(2021092509);
                         internalerror(2021092509);
                       objsec.Data.seek(objrel.DataOffset);
                       objsec.Data.seek(objrel.DataOffset);
-                      WriteUleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).FuncIndex);
+                      if TWasmObjSymbol(objrel.symbol).FuncIndex<0 then
+                        internalerror(2022012401)
+                      else
+                        WriteUleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).FuncIndex);
                     end;
                     end;
                   RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB:
                   RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB:
                     begin
                     begin
@@ -1064,14 +1067,20 @@ implementation
                       if not assigned(objrel.symbol) then
                       if not assigned(objrel.symbol) then
                         internalerror(2021092509);
                         internalerror(2021092509);
                       objsec.Data.seek(objrel.DataOffset);
                       objsec.Data.seek(objrel.DataOffset);
-                      WriteUleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).GlobalIndex);
+                      if TWasmObjSymbol(objrel.symbol).GlobalIndex<0 then
+                        internalerror(2022012402)
+                      else
+                        WriteUleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).GlobalIndex);
                     end;
                     end;
                   RELOC_TAG_INDEX_LEB:
                   RELOC_TAG_INDEX_LEB:
                     begin
                     begin
                       if not assigned(objrel.symbol) then
                       if not assigned(objrel.symbol) then
                         internalerror(2021092716);
                         internalerror(2021092716);
                       objsec.Data.seek(objrel.DataOffset);
                       objsec.Data.seek(objrel.DataOffset);
-                      WriteSleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).TagIndex);
+                      if TWasmObjSymbol(objrel.symbol).TagIndex<0 then
+                        internalerror(2022012403)
+                      else
+                        WriteSleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).TagIndex);
                     end;
                     end;
                   else
                   else
                     internalerror(2021092510);
                     internalerror(2021092510);