diff options
author | Mark H Weaver <mhw@netris.org> | 2013-08-09 18:23:56 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2013-08-09 18:26:07 -0400 |
commit | b7c1b60c83098abf83c39b724e4e96eae8478c53 (patch) | |
tree | 464941ff44909f2e125d2f18ef8b04754a78851d /libguile/foreign.c | |
parent | fa102e73c3d14f52d089ec2faa55c9a7e87f4a23 (diff) | |
download | guile-b7c1b60c83098abf83c39b724e4e96eae8478c53.tar.gz |
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.
Diffstat (limited to 'libguile/foreign.c')
-rw-r--r-- | libguile/foreign.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libguile/foreign.c b/libguile/foreign.c index 90a4fcab4..01af90019 100644 --- a/libguile/foreign.c +++ b/libguile/foreign.c @@ -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 |