Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-256

LP:995501 - mysqltest attempts to parse Perl code inside a block with false condition, gets confused and throws wrong errors

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 5.5.22, 5.3.6, 5.2.11, 5.1.61
    • Fix Version/s: 5.5.25, 5.3.8, 5.2.13, 5.1.66
    • Component/s: None
    • Labels:

      Description

      https://bugs.launchpad.net/maria/+bug/995501

      The following test case

      let $run = 0;
      if ($run)
      {
        --perl
        foreach (1)
        {
          print "In perl\n";
        }
        EOF
        SELECT 1;
      }
      --echo # Done
      

      fails with

      mysqltest: At line 9: query 'EOF
      SELECT 1' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EOF
      SELECT 1' at line 1
      

      Reproducible on MariaDB 5.1-5.5, MySQL 5.1-5.6.

      The problem, how I understand it from a quick look, is that mysqltest attempts to parse the code even inside --perl / EOF block; but it fails because it doesn't expect any 'foreach'es or other ways to start a block except for 'if' or 'while'; so it does not notice a start of the inner block, and the rest of parsing goes all wrong.

      It only happens when the outer block is not to be executed. For example, this works all right:

      let $run = 1;
      if ($run)
      {
        --perl
        foreach (1)
        {
          print "In perl\n";
        }
        EOF
        SELECT 1;
      }
      --echo # Done
      

      The right approach seems to be totally ignore everything from the beginning of a perl block and till its eof string. Sorry for not providing a patch so far, during the brief investigation I didn't notice an obvious way to fix it, it would require deeper digging from
      my side, while maybe somebody else would know right away.

      The problem is a bit of pain for writing reasonably complicated test cases, but so far it seems I can work around it, so I'm setting importance to 'Minor' for now.

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            serg Sergei Golubchik added a comment -

            fixed. pushed in 5.1 and 5.2

            Show
            serg Sergei Golubchik added a comment - fixed. pushed in 5.1 and 5.2

              People

              • Assignee:
                serg Sergei Golubchik
                Reporter:
                elenst Elena Stepanova
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0 minutes
                  0m
                  Logged:
                  Time Spent - 30 minutes
                  30m