New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
External engine trigger crashing server if table have computed field [CORE5972] #6224
Comments
Modified by: @asfernandesassignee: Adriano dos Santos Fernandes [ asfernandes ] |
Commented by: @asfernandes Please test master, then I will backport the fix. |
Modified by: @asfernandesstatus: Open [ 1 ] => Resolved [ 5 ] resolution: Fixed [ 1 ] Fix Version: 4.0 Beta 1 [ 10750 ] |
Commented by: @asfernandes @artyom do you have some plan to test it? |
Commented by: @artyom-smirnov I will test it tomorrow. |
Commented by: @artyom-smirnov I have tested mostly with fbjava and bit with udr engine, looks like all OK. |
Modified by: @asfernandesVersion: 3.0.4 [ 10863 ] Fix Version: 3.0.5 [ 10885 ] Version: 3.0.5 [ 10885 ] => |
Commented by: @artyom-smirnov Looks like another issue with external engine triggers and computed fields: Inserting into table with field computed by select expression, will lead to stack smashing. For example simple table like this: create table test(id int, c1 computed by ((select '' from rdb$database))); On debug build of master: (gdb) bt |
Modified by: @artyom-smirnovVersion: 4.0 Beta 2 [ 10888 ] |
Commented by: @artyom-smirnov Can someone review: #243 This is simple fix based on current built-in triggers implementation. |
Modified by: @asfernandesFix Version: 4.0 Beta 2 [ 10888 ] Fix Version: 3.0.6 [ 10889 ] Fix Version: 3.0.5 [ 10885 ] => Fix Version: 4.0 Beta 1 [ 10750 ] => |
Modified by: @pavel-zotovstatus: Resolved [ 5 ] => Resolved [ 5 ] QA Status: No test => Done successfully |
Modified by: @pavel-zotovstatus: Resolved [ 5 ] => Closed [ 6 ] |
Submitted by: @artyom-smirnov
Votes: 1
Reproduction steps (on master):
1. Create simple UDR trigger in examples/udr/Triggers.cpp and build it.
FB_UDR_BEGIN_TRIGGER(dummy)
FB_UDR_EXECUTE_TRIGGER
{
printf("test! \n");
}
FB_UDR_END_TRIGGER
2. Execute it on table with computed field:
create database 'localhost:/tmp/test_trig.fdb';
create table test(id int, comp int computed by (1));
create trigger dummy after insert on test external name 'udrcpp_example!dummy' engine udr;
insert into test values(1);
3. Server will crash.
Stacktrace:
Thread 5 "firebird" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff0c04700 (LWP 15380)]
__memmove_sse2_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:311
311 ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: No such file or directory.
(gdb) bt 6
#0 __memmove_sse2_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:311
#1 0x00007ffff4e62d82 in CVT_move_common (from=0x7ffff0c02440, to=0x7ffff0c02450, decSt=..., cb=0x7ffff47cc700) at /workspace/rdb/firebird_master/src/common/cvt.cpp:1508
#2 0x00007ffff4a85e45 in CVT_move (from=0x7ffff0c02440, to=0x7ffff0c02450, decSt=...) at /workspace/rdb/firebird_master/src/jrd/../jrd/cvt_proto.h:74
#3 0x00007ffff4b4d66f in MOV_move (tdbb=0x7ffff0c03580, from=0x7ffff0c02440, to=0x7ffff0c02450) at /workspace/rdb/firebird_master/src/jrd/mov.cpp:449
#4 0x00007ffff4977d9f in Jrd::ExtEngineManager::Trigger::setValues (this=0x7ffff4378c80, tdbb=0x7ffff0c03580, msgBuffer=..., rpb=0x7fffe8fe55f0)
at /workspace/rdb/firebird_master/src/jrd/ExtEngineManager.cpp:983
#5 0x00007ffff49777e8 in Jrd::ExtEngineManager::Trigger::execute (this=0x7ffff4378c80, tdbb=0x7ffff0c03580, action=1, oldRpb=0x0, newRpb=0x7fffe8fe55f0)
at /workspace/rdb/firebird_master/src/jrd/ExtEngineManager.cpp:914
(More stack frames follow...)
(gdb) f 1
#1 0x00007ffff4e62d82 in CVT_move_common (from=0x7ffff0c02440, to=0x7ffff0c02450, decSt=..., cb=0x7ffff47cc700) at /workspace/rdb/firebird_master/src/common/cvt.cpp:1508
1508 memcpy(p, q, length);
(gdb) p q
$1 = (const UCHAR *) 0x0
Commits: f931b0b d6a8768 d99b3a7 c53cee3 f0e9c4e
The text was updated successfully, but these errors were encountered: