gregory_r_warnes@groton.pfizer.com
2001-Dec-03 19:34 UTC
[Rd] Segfault in foreign:read.xport (PR#1192)
I get a segfault when trying to read a SAS transport file with rather long rows using read.xport from package foreign (version 0.4-7). The culprit seems to be these lines in xport_read in SASxport.c: 590 } else { 591 c = strchr(tmpchar, ' '); 592 *c = '\0'; 593 SET_STRING_ELT(VECTOR_ELT(data, k), j, 594 (c == tmpchar) ? R_BlankString : 595 mkChar(tmpchar)); 596 } (gdb) print tmpchar $1 = 0xb63674 "0502" (gdb) print c $2 = 0x0 According to the solaris man pages, strchr returns NULL if there is no match. Changing lines 591 and 592 to add an appropriate test for null seems to fix the problem: 590 } else { 591 if( c = strchr(tmpchar, ' ') ) 592 *c = '\0'; 593 SET_STRING_ELT(VECTOR_ELT(data, k), j, 594 (c == tmpchar) ? R_BlankString : 595 mkChar(tmpchar)); 596 } I haven't looked closely at the code, so this may not be the correct solution. Patch and version information below. -Greg -------------> R.version_ platform sparc-sun-solaris2.8 arch sparc os solaris2.8 system sparc, solaris2.8 status major 1 minor 3.1 year 2001 month 08 day 31 language R ----------- -------------Patch Starts Here---------------- diff -r foreign.orig//src/SASxport.c foreign/src/SASxport.c 591,595c591,598 < c = strchr(tmpchar, ' '); < *c = '\0'; < SET_STRING_ELT(VECTOR_ELT(data, k), j, < (c == tmpchar) ? R_BlankString : < mkChar(tmpchar)); ---> if( c = strchr(tmpchar, ' ') ) > { > *c = '\0'; > } > > SET_STRING_ELT(VECTOR_ELT(data, k), j, > (c == tmpchar) ? R_BlankString : > mkChar(tmpchar));------------Patch Ends Here-------------------- LEGAL NOTICE Unless expressly stated otherwise, this message is confidential and may be privileged. It is intended for the addressee(s) only. Access to this E-mail by anyone else is unauthorized. If you are not an addressee, any disclosure or copying of the contents of this E-mail or any action taken (or not taken) in reliance on it is unauthorized and may be unlawful. If you are not an addressee, please inform the sender immediately. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._