1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

dereference-pointer: check for null pointer.

* libguile/foreign.c (scm_dereference_pointer): Check for attempts to
  dereference a null pointer.

* test-suite/tests/foreign.test ("null pointer"): Add test.
This commit is contained in:
Mark H Weaver 2013-08-09 18:23:56 -04:00
parent fa102e73c3
commit b7c1b60c83
2 changed files with 11 additions and 1 deletions

View file

@ -342,9 +342,15 @@ SCM_DEFINE (scm_dereference_pointer, "dereference-pointer", 1, 0, 0,
"holds a pointer, return this pointer.")
#define FUNC_NAME s_scm_dereference_pointer
{
void **ptr;
SCM_VALIDATE_POINTER (1, pointer);
return scm_from_pointer (* (void **) SCM_POINTER_VALUE (pointer), NULL);
ptr = SCM_POINTER_VALUE (pointer);
if (SCM_UNLIKELY (ptr == NULL))
null_pointer_error (FUNC_NAME);
return scm_from_pointer (*ptr, NULL);
}
#undef FUNC_NAME

View file

@ -51,6 +51,10 @@
(pass-if "null-pointer? %null-pointer"
(null-pointer? %null-pointer))
(pass-if-exception "dereference-pointer %null-pointer"
exception:null-pointer-error
(dereference-pointer %null-pointer))
(pass-if-exception "pointer->bytevector %null-pointer"
exception:null-pointer-error
(pointer->bytevector %null-pointer 7)))