Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • pike pike
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 107
    • Issues 107
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • pikelang
  • pikepike
  • Issues
  • #7826

string_has_null() fails sometimes in Pike 8.0.28.

Imported from http://bugzilla.roxen.com/bugzilla/show_bug.cgi?id=7826

Reported by @grubba

mkdirhier in the build system fails:

int mkdirhier(string path, int|void mod)
{
  werror("mkdirhier(%O, %O)...\n", path, mod);
  werror("CWD: %O\n", getcwd());
  werror("mkdir: %O [%O]\n", mkdir, function_object(mkdir));
  trace(2);
  string a = "";
  int r = 1;
  function m = mkdir;

  if(Stdio.is_dir(path))
    return query_num_arg() == 1 ? 1 : (chmod(path, mod),1);
  
  foreach(path/"/", string d)
  {
    a += d + "/";
    if(sizeof(d))
      if(query_num_arg() == 1) {
	werror("mkdir(%O)\n", a);
	r = m(a);
      } else {
	werror("mkdir(%O, %O)\n", a, mod);
	r = m(a, mod);
      }
    int e = errno();
    werror("mkdir(%O, %O) ==> %O\n", a, mod, r);
    if (!r) {
      werror("Errno: %O: %s\n", e, strerror(e));
    }
  }
  trace(0);
  werror("get_dir: %O\n", get_dir());
  
  return r || (query_num_arg() == 2 && (chmod(path, mod),1));
}

mkdirhier("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n", 493)...
CWD: "/home/dist/tmp/build/roxen-pkg-rhel6_x86_64"
mkdir: mkdir [0]
- -:                   7ab230->is_dir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n")
- -:                   7aaea0->__lambda_65641_1_line_1821("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\...
- module.pmod:2785:    7aaea0->__lambda_65641_1_line_1821() returns: 0
- mkpackage.pike:15:   7ab230->is_dir() returns: 0
- mkpackage.pike:18:   program(home/per/src/pike80/src/iterators.cmod:1186)("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217c...
- -:                   7ab5c0->create("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n",47)
- -:                   7ab5c0->create() returns: 47
- mkpackage.pike:18:   returns: object(home/per/src/pike80/src/iterators.cmod:1186)
- -:                   7aad50->write("mkdir(%O, %O)\n","#!/",493)
mkdir("#!/", 493)
- mkpackage.pike:26:   7aad50->write() returns: 18
- mkpackage.pike:27:   mkdir("#!/",493)
- mkpackage.pike:27:   returns: 0
- -:                   7aad50->write("mkdir(%O, %O) ==> %O\n","#!/",493,0)
mkdir("#!/", 493) ==> 0
- mkpackage.pike:30:   7aad50->write() returns: 24
- -:                   7aad50->write("Errno: %O: %s\n",22,"Invalid argument")
Errno: 22: Invalid argument
- mkpackage.pike:32:   7aad50->write() returns: 28
- -:                   7aad50->write("mkdir(%O, %O)\n","#!/bin/",493)
mkdir("#!/bin/", 493)
- mkpackage.pike:26:   7aad50->write() returns: 22
- mkpackage.pike:27:   mkdir("#!/bin/",493)
- mkpackage.pike:27:   returns: 0
- -:                   7aad50->write("mkdir(%O, %O) ==> %O\n","#!/bin/",493,0)
mkdir("#!/bin/", 493) ==> 0
- mkpackage.pike:30:   7aad50->write() returns: 28
- -:                   7aad50->write("Errno: %O: %s\n",2,"No such file or directory")
Errno: 2: No such file or directory
- mkpackage.pike:32:   7aad50->write() returns: 36
- -:                   7aad50->write("mkdir(%O, %O)\n","#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./",493)
mkdir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./", 493)
- mkpackage.pike:26:   7aad50->write() returns: 69
- mkpackage.pike:27:   mkdir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./",493)
- mkpackage.pike:27:   returns: 0
- -:                   7aad50->write("mkdir(%O, %O) ==> %O\n","#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./",493,0)
mkdir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./", 493) ==> 0
- mkpackage.pike:30:   7aad50->write() returns: 75
- -:                   7aad50->write("Errno: %O: %s\n",2,"No such file or directory")
Errno: 2: No such file or directory
- mkpackage.pike:32:   7aad50->write() returns: 36
- -:                   7aad50->write("mkdir(%O, %O)\n","#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n...
mkdir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n"
"/", 493)
- mkpackage.pike:26:   7aad50->write() returns: 103
- mkpackage.pike:27:   mkdir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n"
"/",493)
- mkpackage.pike:27:   returns: 0
- -:                   7aad50->write("mkdir(%O, %O) ==> %O\n","#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \...
mkdir("#!/bin/sh\n"
"tar xf \"$0\" StmP1217ce1.sh\n"
"exec ./StmP1217ce1.sh \"$0\" \"$@\"\n"
"/", 493) ==> 0
- mkpackage.pike:30:   7aad50->write() returns: 109
- -:                   7aad50->write("Errno: %O: %s\n",2,"No such file or directory")
Errno: 2: No such file or directory
- mkpackage.pike:32:   7aad50->write() returns: 36
get_dir: ({ /* 9 elements */
    "StmP17a29d9.sh",
    "StmP4bdaf62.sh",
    "StmP110dd7c.sh",
    "StmP41b2c90.sh",
    "StmP618f3c0.sh",
    "StmP1217ce1.sh",
    "StmPa4d952e.sh",
    "StmP10191d8.sh",
    "StmPd34cb29.sh"
})
chmod(): Failed: File not found
/home/dist/build/devel/archive/mkpackage.pike:38:
    /main()->mkdirhier("#!/bin/sh\ntar xf \"$0\" StmP1217ce1.sh\nexec ./StmP12
    17ce1.sh \"$0\" \"$@\"\n",493)                                            

mkdir("#!/", 493) failing with errno 22 (EINVAL) indicates that string_has_null() has returned true (from efuns.c):

  if (string_has_null(str)) {
    /* Filenames with NUL are not supported. */
    errno = EINVAL;
    pop_n_elems(args);
    push_int(0);
    return;
  }

string_has_null() is defined in stralloc.h as:

static INLINE int ATTRIBUTE((unused)) string_has_null( struct pike_string *x )
{
    INT32 min;
    if( !x->len ) return 0;
    check_string_range(x,0,&min,0);
    return min <= 0;
}
Assignee
Assign to
Time tracking