Package: src:firebird3.0
Version: 3.0.0.32483.ds4-1
Severity: important
Tags: upstream patch
Control: forwarded -1 http://tracker.firebirdsql.org/browse/CORE-5233
User: debian-sp...@lists.debian.org
Usertags: sparc64

After applying the patch in
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=823705, when building
employee.fdb on sparc64, a bus error is produced:

sh -x -c "lockfile -1 ../../gen/Release/firebird/bin/build-db.lock && 
./empbuild ../../gen/examples/employee.fdb; res=\$?; rm -f 
../../gen/Release/firebird/bin/build-db.lock; exit \$res"
+ lockfile -1 ../../gen/Release/firebird/bin/build-db.lock
ERROR: ld.so: object 'libeatmydata.so' from LD_PRELOAD cannot be preloaded 
(cannot open shared object file): ignored.
+ ./empbuild ../../gen/examples/employee.fdb
creating database ../../gen/examples/employee.fdb
Turning forced writes off
Creating tables
Turning off indices and triggers
Bus error
Couldn't turn off indices and triggers
+ res=44
+ rm -f ../../gen/Release/firebird/bin/build-db.lock
+ exit 44
Makefile.examples:125: recipe for target '../../gen/examples/employee.fdb' 
failed

This can be fixed by applying the attached patch.

Regards,
James

--- a/src/jrd/met.epp
+++ b/src/jrd/met.epp
@@ -1486,11 +1486,19 @@
 			USHORT offset = p[0] | (p[1] << 8);
 			p += 2;
 
-			const Ods::Descriptor* odsDflDesc = (Ods::Descriptor*) p;
-			p = (UCHAR*) (odsDflDesc + 1);
+			Ods::Descriptor odsDflDesc;
+			memcpy(&odsDflDesc, p, sizeof(odsDflDesc));
+			p += sizeof(Ods::Descriptor);
 
-			dsc desc = *odsDflDesc;
-			desc.dsc_address = const_cast<UCHAR*>(p);
+			dsc desc = odsDflDesc;
+
+			USHORT align = type_alignments[desc.dsc_dtype];
+			if (!align)
+				align = 1;
+
+			UCHAR tmp_buffer[desc.dsc_length + align - 1];
+			desc.dsc_address = FB_ALIGN(&tmp_buffer[0], align);
+			memcpy(desc.dsc_address, p, desc.dsc_length);
 			EVL_make_value(tdbb, &desc, &format->fmt_defaults[offset], relation->rel_pool);
 
 			p += desc.dsc_length;

Reply via email to