diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
commit | 4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch) | |
tree | ba5f07bf3f9d22d82e54a462313f5d244036c768 /dev-db/gigabase/files/gigabase-3.83-fix-dereferencing.patch |
reinit the tree, so we can have metadata
Diffstat (limited to 'dev-db/gigabase/files/gigabase-3.83-fix-dereferencing.patch')
-rw-r--r-- | dev-db/gigabase/files/gigabase-3.83-fix-dereferencing.patch | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/dev-db/gigabase/files/gigabase-3.83-fix-dereferencing.patch b/dev-db/gigabase/files/gigabase-3.83-fix-dereferencing.patch new file mode 100644 index 000000000000..d2f0669d24fa --- /dev/null +++ b/dev-db/gigabase/files/gigabase-3.83-fix-dereferencing.patch @@ -0,0 +1,182 @@ +--- a/session.cpp ++++ b/session.cpp +@@ -131,7 +131,7 @@ + throw CursorException("Cursor is not opened"); + } + fillBuffer(sizeof(oid_t)); +- oid_t currOid = *(oid_t*)&sockBuf[bufPos]; ++ oid_t currOid = *(oid_t*)(sockBuf + bufPos); + bufPos += sizeof(oid_t); + if (currObj != NULL) { + delete[] currObj; +@@ -139,7 +139,7 @@ + } + if (currOid != 0) { + fillBuffer(sizeof(int)); +- size_t size = *(int*)&sockBuf[bufPos]; ++ size_t size = *(int*)(sockBuf + bufPos); + if (size <= SOCKET_BUFFER_SIZE) { + fillBuffer(size); + if (record != NULL) { +--- a/database.cpp ++++ b/database.cpp +@@ -739,40 +739,55 @@ + return; + + case dbvmInvokeMethodBool: +- execute(expr->ref.base, iattr, sattr); +- expr->ref.field->method->invoke(sattr.base, &sattr.bvalue); +- sattr.bvalue = *(bool*)&sattr.bvalue; +- iattr.free(sattr); +- return; ++ { ++ bool val; ++ execute(expr->ref.base, iattr, sattr); ++ expr->ref.field->method->invoke(sattr.base, &val); ++ sattr.bvalue = val; ++ iattr.free(sattr); ++ return; ++ } + case dbvmInvokeMethodInt1: +- execute(expr->ref.base, iattr, sattr); +- expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); +- sattr.ivalue = *(int1*)&sattr.ivalue; +- iattr.free(sattr); +- return; ++ { ++ int1 val; ++ execute(expr->ref.base, iattr, sattr); ++ expr->ref.field->method->invoke(sattr.base, &val); ++ sattr.ivalue = val; ++ iattr.free(sattr); ++ return; ++ } + case dbvmInvokeMethodInt2: +- execute(expr->ref.base, iattr, sattr); +- expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); +- sattr.ivalue = *(int2*)&sattr.ivalue; +- iattr.free(sattr); +- return; ++ { ++ int2 val; ++ execute(expr->ref.base, iattr, sattr); ++ expr->ref.field->method->invoke(sattr.base, &val); ++ sattr.ivalue = val; ++ iattr.free(sattr); ++ return; ++ } + case dbvmInvokeMethodInt4: +- execute(expr->ref.base, iattr, sattr); +- expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); +- sattr.ivalue = *(int4*)&sattr.ivalue; +- iattr.free(sattr); +- return; ++ { ++ int4 val; ++ execute(expr->ref.base, iattr, sattr); ++ expr->ref.field->method->invoke(sattr.base, &val); ++ sattr.ivalue = val; ++ iattr.free(sattr); ++ return; ++ } + case dbvmInvokeMethodInt8: + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &sattr.ivalue); + iattr.free(sattr); + return; + case dbvmInvokeMethodReal4: +- execute(expr->ref.base, iattr, sattr); +- expr->ref.field->method->invoke(sattr.base, &sattr.fvalue); +- sattr.fvalue = *(real4*)&sattr.fvalue; +- iattr.free(sattr); +- return; ++ { ++ real4 val; ++ execute(expr->ref.base, iattr, sattr); ++ expr->ref.field->method->invoke(sattr.base, &val); ++ sattr.fvalue = val; ++ iattr.free(sattr); ++ return; ++ } + case dbvmInvokeMethodReal8: + execute(expr->ref.base, iattr, sattr); + expr->ref.field->method->invoke(sattr.base, &sattr.fvalue); +@@ -792,28 +807,43 @@ + return; + + case dbvmInvokeSelfMethodBool: +- expr->ref.field->method->invoke(iattr.record, &sattr.bvalue); +- sattr.bvalue = *(bool*)&sattr.bvalue; +- return; ++ { ++ bool val; ++ expr->ref.field->method->invoke(iattr.record, &val); ++ sattr.bvalue = val; ++ return; ++ } + case dbvmInvokeSelfMethodInt1: +- expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); +- sattr.ivalue = *(int1*)&sattr.ivalue; +- return; ++ { ++ int1 val; ++ expr->ref.field->method->invoke(iattr.record, &val); ++ sattr.ivalue = val; ++ return; ++ } + case dbvmInvokeSelfMethodInt2: +- expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); +- sattr.ivalue = *(int2*)&sattr.ivalue; +- return; ++ { ++ int2 val; ++ expr->ref.field->method->invoke(iattr.record, &val); ++ sattr.ivalue = val; ++ return; ++ } + case dbvmInvokeSelfMethodInt4: +- expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); +- sattr.ivalue = *(int4*)&sattr.ivalue; +- return; ++ { ++ int4 val; ++ expr->ref.field->method->invoke(iattr.record, &val); ++ sattr.ivalue = val; ++ return; ++ } + case dbvmInvokeSelfMethodInt8: + expr->ref.field->method->invoke(iattr.record, &sattr.ivalue); + return; + case dbvmInvokeSelfMethodReal4: +- expr->ref.field->method->invoke(iattr.record, &sattr.fvalue); +- sattr.fvalue = *(real4*)&sattr.fvalue; +- return; ++ { ++ real4 val; ++ expr->ref.field->method->invoke(iattr.record, &val); ++ sattr.fvalue = *(real4*)&sattr.fvalue; ++ return; ++ } + case dbvmInvokeSelfMethodReal8: + expr->ref.field->method->invoke(iattr.record, &sattr.fvalue); + return; +--- a/server.cpp ++++ b/server.cpp +@@ -2097,7 +2097,7 @@ + bufUsed = 0; + } + oid_t oid = cursor.getOid(); +- *(oid_t*)&buf[bufUsed] = oid; ++ *(oid_t*)(buf + bufUsed) = oid; + bufUsed += sizeof(oid_t); + dbRecord* record = db->getRow(tie, oid); + size_t size = record->size; +@@ -2129,7 +2129,7 @@ + bufUsed = 0; + } + } +- *(oid_t*)&buf[bufUsed] = 0; ++ *(oid_t*)(buf + bufUsed) = 0; + return session->sock->write(buf, bufUsed + sizeof(oid_t)); + } + |