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:
parent
fa102e73c3
commit
b7c1b60c83
2 changed files with 11 additions and 1 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue