Add validation for project and jobset names

[?]
Apr 17, 2012, 8:53 AM
HQGXL4MXGHICQ3IRRQUR6KQHS2RKVOTDKQ5ZETXHQ56DANR2YADQC

Dependencies

  • [2] LMETCA7G Cleanup
  • [3] KG5AMUMG Cleanup
  • [4] RSEGBU6C Hydra/20: Jobset clone feature
  • [5] CS7T2XFI
  • [6] QTFVCDIF added hide feature for project/jobset
  • [7] TNMOG2ZQ Indentation
  • [8] OOQ2D3KC * Refactoring: move fetchInput out of hydra_scheduler into a separate
  • [9] 3HZY24CX * Make jobsets viewable under
  • [10] ONGLIFOY allow _'s in first character of filenames
  • [11] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [12] N45RZUQ6 Reduce I/O in build listings by only fetching required columns
  • [13] U4TD3AIQ Add support for viewing jobset evaluations
  • [14] G5ZR3ZVZ hydra: put contents links into html, add links to files from contents page
  • [15] KVPYKWZ7 * Allow `-' in project/jobset names.
  • [16] 5NO7NCKT * Refactoring.
  • [17] 3Y7AFJSS * Support linking to the latest job in a view for a specific platform, e.g.
  • [18] A52HEFHQ * Allow builds to be restarted (if they failed with a transient error,
  • [19] UMFB2767 Hydra/64: Leaving number of builds empty gives DBIx error
  • [20] 3KU4L7L3 remove buildonlylatest propery, which was committed by accident
  • [21] DE2DNCOI Allow comparing an evaluation with an arbitrary other evaluation
  • [22] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [23] AS2OXLRM * Editing releases.
  • [*] LZO3C2KI * Hack around those SQLite timeouts: just retry the transaction.
  • [*] LBNVQXUB * Build the /build stuff in a separate controller.

Change contents

  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 224
    [4.1571][4.1571:1667]()
    error($c, "Invalid jobset name: $jobsetName") unless $jobsetName =~ /^[[:alpha:]][\w\-]*$/;
    [4.1571]
    [4.1667]
    error($c, "Invalid jobset name: ‘$jobsetName’") if $jobsetName !~ /^$jobsetNameRE$/;
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 301
    [4.427][4.427:594]()
    my $newjobsetName = trim $c->request->params->{"newjobset"};
    error($c, "Invalid jobset name: $newjobsetName") unless $newjobsetName =~ /^[[:alpha:]][\w\-]*$/;
    [4.427]
    [4.594]
    my $newJobsetName = trim $c->request->params->{"newjobset"};
    error($c, "Invalid jobset name: $newJobsetName") unless $newJobsetName =~ /^[[:alpha:]][\w\-]*$/;
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 304
    [4.595][4.188:207]()
    my $newjobset;
    [4.595]
    [4.207]
    my $newJobset;
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 306
    [4.249][4.664:757](),[4.664][4.664:757]()
    $newjobset = $jobset->project->jobsets->create(
    { name => $newjobsetName
    [4.249]
    [4.757]
    $newJobset = $jobset->project->jobsets->create(
    { name => $newJobsetName
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 317
    [4.1118][4.1118:1225]()
    my $newinput = $newjobset->jobsetinputs->create({name => $input->name, type => $input->type});
    [4.1118]
    [4.1225]
    my $newinput = $newJobset->jobsetinputs->create({name => $input->name, type => $input->type});
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 324
    [4.378][4.1431:1555](),[4.1431][4.1431:1555]()
    $c->res->redirect($c->uri_for($c->controller('Jobset')->action_for("edit"), [$jobset->project->name, $newjobsetName]));
    [4.378]
    [3.53]
    $c->res->redirect($c->uri_for($c->controller('Jobset')->action_for("edit"), [$jobset->project->name, $newJobsetName]));
  • replacement in src/lib/Hydra/Controller/JobsetEval.pm at line 35
    [4.401][4.401:781](),[4.781][2.112:160]()
    if (defined $compare && $compare =~ /^\d+$/) {
    $eval2 = $c->model('DB::JobsetEvals')->find($compare)
    or notFound($c, "Evaluation $compare doesn't exist.");
    } elsif (defined $compare && $compare =~ /^($jobNameRE)$/) {
    my $j = $c->stash->{project}->jobsets->find({name => $compare})
    or notFound($c, "Jobset $compare doesn't exist.");
    $eval2 = getLatestFinishedEval($c, $j);
    [4.401]
    [4.1069]
    if (defined $compare) {
    if ($compare =~ /^\d+$/) {
    $eval2 = $c->model('DB::JobsetEvals')->find($compare)
    or notFound($c, "Evaluation $compare doesn't exist.");
    } elsif (defined $compare && $compare =~ /^($jobsetNameRE)$/) {
    my $j = $c->stash->{project}->jobsets->find({name => $compare})
    or notFound($c, "Jobset $compare doesn't exist.");
    $eval2 = getLatestFinishedEval($c, $j);
    } else {
    notFound($c, "Unknown comparison source ‘$compare’.");
    }
  • edit in src/lib/Hydra/Controller/Project.pm at line 122
    [4.3258]
    [25.301]
    error($c, "Invalid project name: ‘$projectName’") if $projectName !~ /^$projectNameRE$/;
  • edit in src/lib/Hydra/Controller/Project.pm at line 156
    [4.5257]
    [4.5257]
    error($c, "Invalid jobset name: ‘$jobsetName’") if $jobsetName !~ /^$jobsetNameRE$/;
  • replacement in src/lib/Hydra/Controller/Project.pm at line 175
    [4.3853][4.0:117]()
    error($c, "Invalid project name: " . ($projectName || "(empty)")) unless $projectName =~ /^[[:alpha:]][\w\-]*$/;
    [4.3853]
    [4.3966]
    error($c, "Invalid project name: ‘$projectName’") if $projectName !~ /^$projectNameRE$/;
  • replacement in src/lib/Hydra/Helper/CatalystUtils.pm at line 16
    [2.187][4.689:748](),[4.9780][4.689:748]()
    $pathCompRE $relPathRE $relNameRE $jobNameRE $systemRE
    [2.187]
    [4.547]
    $pathCompRE $relPathRE $relNameRE $projectNameRE $jobsetNameRE $jobNameRE $systemRE
  • replacement in src/lib/Hydra/Helper/CatalystUtils.pm at line 184
    [4.218][4.1035:1414]()
    Readonly our $pathCompRE => "(?:[A-Za-z0-9-\+\._][A-Za-z0-9-\+\._]*)";
    Readonly our $relPathRE => "(?:$pathCompRE(?:/$pathCompRE)*)";
    Readonly our $relNameRE => "(?:[A-Za-z0-9-][A-Za-z0-9-\.]*)";
    Readonly our $attrNameRE => "(?:[A-Za-z_][A-Za-z0-9_]*)";
    Readonly our $jobNameRE => "(?:$attrNameRE(?:\\.$attrNameRE)*)";
    Readonly our $systemRE => "(?:[a-z0-9_]+-[a-z0-9_]+)";
    [4.218]
    [4.367]
    Readonly our $pathCompRE => "(?:[A-Za-z0-9-\+\._][A-Za-z0-9-\+\._]*)";
    Readonly our $relPathRE => "(?:$pathCompRE(?:/$pathCompRE)*)";
    Readonly our $relNameRE => "(?:[A-Za-z0-9-][A-Za-z0-9-\.]*)";
    Readonly our $attrNameRE => "(?:[A-Za-z_][A-Za-z0-9_]*)";
    Readonly our $projectNameRE => "(?:[A-Za-z_][A-Za-z0-9-_]*)";
    Readonly our $jobsetNameRE => "(?:[A-Za-z_][A-Za-z0-9-_]*)";
    Readonly our $jobNameRE => "(?:$attrNameRE(?:\\.$attrNameRE)*)";
    Readonly our $systemRE => "(?:[a-z0-9_]+-[a-z0-9_]+)";