Uploaded image for project: 'Apache Flex'
  1. Apache Flex
  2. FLEX-33280

[iOS] Packager compiles boolean condition incorrectly after loop break

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Invalid
    • Adobe Flex SDK 4.6 (Release)
    • None
    • Windows 7 Ultimate
      Adobe Flex SDK 4.6 (build 23201, includes Adobe AIR 3.4 SDK)
      Flash Builder 4.5.1.313231
      iPad 3 (running iOS6.0) / iPad 2 (running iOS6.0)

    Description

      ActionScript codes executes unexpectedly when compiled with Ad-Hoc packaging type, using the Flex Packager for iOS.

      The attached sample program contains a for each loop within another for each loop, that is used to compare two lists of integers. At the start of the outer loop, a variable named "matched" is set to false.

      When a match is found in the inner loop, matched is assigned the value true, and the inner loop issues a break command to early-exit the loop.

      Following the inner loop, an if statement checks the value of the boolean variable, like so:

      if (matched == false)
      {
      ...
      }

      When the code is execute as an adhoc iOS release build on an iPad 3, the code within the if statement is executed even when matched == true.

      Changing the code to the following, works as expected:

      if (!matched)
      {
      ...
      }

      Steps to reproduce:

      1) Run the attached BasicMobile project in the AIR simulator on your desktop
      2) The expected result is:

      1. Using matched == false
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      2. Using !matched
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      3. Using no break
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      3) Now export a release build for the same project to Apple iOS, using Ad Hoc packaging type.
      4) Install the app on an iPad or iPhone
      5) Run the app. The result is:

      1. Using matched == false
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      UNMATCHED: 2
      Loop
      MATCHED: 3, 3
      UNMATCHED: 3
      Loop
      UNMATCHED: 4

      2. Using !matched
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      3. Using !matched
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      Notice how in the Adhoc release version, the first case "1. Using matched == false" reports MATCHED and UNMATCHED for items 2 and 3. This indicates that the boolean variable "matched" is passing the test == false, even when its value has been set to true.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            aharui Alex Harui
            mrcrowl Ben Crowl
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment