Posted to tcl by thommey at Tue Jul 19 17:36:56 GMT 2011view raw

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <tcl.h>
  4.  
  5. int main(int argc, char **argv) {
  6. int flags, size;
  7. char *dst, *src = "#test\\\\\\";
  8. Tcl_Interp *interp;
  9.  
  10. Tcl_FindExecutable(argv[0]);
  11. interp = Tcl_CreateInterp();
  12. if (Tcl_Init(interp) != TCL_OK) {
  13. fprintf(stderr, "Failure to initialize: %s\n", Tcl_GetStringResult(interp));
  14. return 1;
  15. }
  16.  
  17. size = Tcl_ScanElement(src, &flags);
  18. dst = malloc(size+1);
  19. printf("%d\n", flags); // crash happens when flags==4 (CONVERT_ESCAPE)
  20. printf("%d\n", Tcl_ConvertElement(src, dst, flags)); // SEGFAULT (dereferencing NULL pointer)
  21. printf("'%s' - '%s'\n", src, dst);
  22. free(dst);
  23. return 0;
  24. }
  25.