Make certain that long strings are zero-terminated.

Allow subscriptions of length zero, means native size.
This commit is contained in:
Andrew Johnson
2009-10-05 20:31:12 +00:00
parent be1b5c6390
commit b8ccd30d77

View File

@@ -186,6 +186,7 @@ SV * newSVdbr(struct event_handler_args *peha) {
if (is_primitive) {
if (value_type == DBR_CHAR) {
/* Long string => Perl scalar */
((char *)peha->dbr) [peha->count - 1] = 0;
return newSVpv(peha->dbr, 0);
}
@@ -252,8 +253,11 @@ SV * newSVdbr(struct event_handler_args *peha) {
/* Value */
if (value_type == DBR_CHAR) {
char *str = dbr_value_ptr(peha->dbr, peha->type);
/* Long string => Perl scalar */
val = newSVpv(dbr_value_ptr(peha->dbr, peha->type), 0);
str[peha->count - 1] = 0;
val = newSVpv(str, 0);
} else if (peha->count == 1) {
/* Single value => Perl scalar */
val = newSVdbf(value_type,
@@ -890,9 +894,9 @@ SV * CA_create_subscription(SV *ca_ref, const char *mask_str, SV *sub, ...) {
while (items > i
&& SvOK(ST(i))) {
if (SvIOK(ST(i))) {
/* Interger => Count arg */
/* Interger => Count arg, zero means native size */
count = SvIV(ST(i));
if (count < 1 || count > ca_element_count(pch->chan)) {
if (count < 0 || count > ca_element_count(pch->chan)) {
croak_msg = "Requested array size is out of range";
goto exit_croak;
}