[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#200351: set/longjump issue?



"Bernhard R. Link" <brlink@debian.org> writes:

> #include <stdio.h>
> #include <setjmp.h>
> 
> void A(jmp_buf *j) {
> 	int v;
> 
> 	printf("[A\n");
> 	v = setjmp(*j);
> 	printf("A: setjmp returned %d\n",v);
> 	printf("A]\n");
> }
> 
> void B(jmp_buf *j) {
> 	printf("[B\n");
> 	longjmp(*j,1);
> 	printf("B]\n");
> }
> 
> int main() {
> 	jmp_buf j;
> 
> 	printf("[main\n");
> 	A(&j);
> 	printf("...main...\n");
> 	B(&j);
> 	printf("main]\n");
> 	return 0;
> }

This code is invalid in two ways: setjump must not be used in an
assignment expression (which is unlikely to cause any actual problems,
though); and longjmp must not jump into a function which has been
terminated after the call to setjmp (which is likely the cause for the
crash).

(Note I haven't read the rest of the thread, this might be irrelevant)

-- 
	Falk



Reply to: