Daarjuist een bijzonder vieze bug

Daarjuist een bijzonder vieze bug tegengekomen in ColdFusion. Tenminste, ik vind dat het een bug is.

<cfswitch expression=“#a#”>
    <cfcase value=“a”></cfcase>
    <cfcase value=“u”><cfset test=1></cfcase>
    <cfcase value=“v”><cfset test=2></cfcase>
    <cfcase value=“w”><cfset test=3></cfcase>
    <cfcase value=“x”><cfset test=4></cfcase>
    <cfcase value=“y”><cfset test=5></cfcase>
</cfswitch>

Dat geeft een null pointer exception op de case met “w”. Ook als die verschoven wordt. Oplossing (na drie kwartier zoeken): de eerste case mag niet leeg zijn. Daar moet minstens een commentaar in staan. Zucht.

4 Comments

  • komt da ni omdat ‘case’ in bijna elke taal als er een van de cases true is, de volgenden in de lijst ook uitgevoerd worden? daarom moet er in C bv een break gezet worden na elke case entry. zoiets.

  • och,leukste case/switch statements doe je “The perl way” (een van de mogelijke “perl ways” dan toch …)
    Eerst hash maken met functies en dan van :
    %FunctieHash = (
    a => sub $test=1,
    b => sub $test=2,

    ;

    if ($FunctieHashlc $case) $FunctieHashlc $case->() # Call function
    else warn “Unknown option: `$case’\n”

    Perl … you gotta love it :)

  • Het heeft niet te maken met een fall-through. Mocht het cfscript> zijn, dan moest er inderdaad overal een break tussen staan, maar niet in gewone cfml.

    Bah. Gewoon zo’n inconsistentie van CFMX, gevolg van eigenlijk toch nog altijd een beetje een 1.0-taal te zijn. En van java te zijn natuurlijk.

    En perl: There’s more than one way to do it, jaja :)
    Ik kom er toch wel serieus van terug van al die self-obfuscating brol: als ik soms dingen van mij tegenkom van een tijd geleden, is het echt niet geestig om zien. Met commentaar als “it was hard to program so it should be hard to read” en “commentaar is voor homo’s”–op het moment zelf wel geestig, maar achteraf… brrr!

Zeg uw gedacht

Vriendjes

<insert standard disclaimer>

Alles wat hier staat is mijn eigen opinie. Het wordt niet nagelezen of goedgekeurd door mijn werkgever voor het on-line komt, en ik bied geen enkele garantie voor kwaliteit of correctheid.

Mijn werkgever is het niet noodzakelijk eens met wat ik schrijf, en het spreekt vanzelf dat hij dan ook op geen enkele wijze aansprakelijk kan zijn voor wat ik hier publiceer.