Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Google’s Agent2Agent protocol finds new home at the Linux Foundation

      June 23, 2025

      Decoding The SVG path Element: Curve And Arc Commands

      June 23, 2025

      This week in AI dev tools: Gemini 2.5 Pro and Flash GA, GitHub Copilot Spaces, and more (June 20, 2025)

      June 20, 2025

      Gemini 2.5 Pro and Flash are generally available and Gemini 2.5 Flash-Lite preview is announced

      June 19, 2025

      Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

      June 24, 2025

      The Lenovo Legion Go 2 gets its first release date tease, which could be accurate — but treat with the biggest pinch of salt

      June 24, 2025

      Denmark will stick with Windows — government still plans to ditch Microsoft Office

      June 24, 2025

      OneDrive user locked out of “30 years worth of photos and work” without any support — calls Microsoft a “Kafkaesque black hole”

      June 24, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Best PHP Project for Final Year Students: Learn, Build, and get Successful with PHPGurukul

      June 24, 2025
      Recent

      Best PHP Project for Final Year Students: Learn, Build, and get Successful with PHPGurukul

      June 24, 2025

      Community News: Latest PECL Releases (06.24.2025)

      June 24, 2025

      JSON module scripts are now Baseline Newly Available

      June 24, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

      June 24, 2025
      Recent

      Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

      June 24, 2025

      The Lenovo Legion Go 2 gets its first release date tease, which could be accurate — but treat with the biggest pinch of salt

      June 24, 2025

      Denmark will stick with Windows — government still plans to ditch Microsoft Office

      June 24, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: Leap to the Past

    CodeSOD: Leap to the Past

    May 8, 2025

    Early in my career, I had the misfortune of doing a lot of Crystal Reports work. Crystal Reports is another one of those tools that lets non-developer, non-database savvy folks craft reports. Which, like so often happens, means that the users dig themselves incredible holes and need professional help to get back out, because at the end of the day, when the root problem is actually complicated, all the helpful GUI tools in the world can’t solve it for you.

    Michael was in a similar position as I was, but for Michael, there was a five alarm fire. It was the end of the month, and a bunch of monthly sales reports needed to be calculated. One of the big things management expected to see was a year-over-year delta on sales, and they got real cranky if the line didn’t go up. If they couldn’t even see the line, they went into a full on panic and assumed the sales team was floundering and the company was on the verge of collapse.

    Unfortunately, the report was spitting out an error: “A day number must be between 1 and the number of days in the month.”

    Michael dug in, and found this “delight” inside of a function called one_year_ago:

    
    Local StringVar yearStr  := Left({?ReportToDate}, 4);
    Local StringVar monthStr := Mid({?ReportToDate}, 5, 2); 
    Local StringVar dayStr   := Mid({?ReportToDate}, 7, 2);
    Local StringVar hourStr  := Mid({?ReportToDate}, 9, 2);
    Local StringVar minStr   := Mid({?ReportToDate}, 11, 2);
    Local StringVar secStr   := Mid({?ReportToDate}, 13, 2);
    Local NumberVar LastYear;
    
    LastYear := ToNumber(YearStr) - 1;
    YearStr := Replace (toText(LastYear),'.00' , '' );
    YearStr := Replace (YearStr,',' , '' );
    
    //DateTime(year, month, day, hour, min, sec);
    //Year + Month + Day + Hour + min + sec;  // string value
    DateTime(ToNumber(YearStr), ToNumber(MonthStr), ToNumber(dayStr), ToNumber(HourStr), ToNumber(MinStr),ToNumber(SecStr) );
    

    We’ve all seen string munging in date handling before. That’s not surprising. But what’s notable about this one is the day on which it started failing. As stated, it was at the end of the month. But which month? February. Specifically, February 2024, a leap year. Since they do nothing to adjust the dayStr when constructing the date, they were attempting to construct a date for 29-FEB-2023, which is not a valid date.

    Michael writes:

    Yes, it’s Crystal Reports, but surprisingly not having date manipulation functions isn’t amongst it’s many, many flaws. It’s something I did in a past life isn’t it??

    The fix was easy enough- rewrite the function to actually use date handling. This made a simpler, basically one-line function, using Crystal’s built in functions. That fixed this particular date handling bug, but there were plenty more places where this kind of hand-grown string munging happened, and plenty more opportunities for the report to fail.

    [Advertisement]
    ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleXigmaNAS – storage NAS distribution
    Next Article openSUSE rimuove l’ambiente desktop Deepin dai suoi repository software

    Related Posts

    News & Updates

    Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

    June 24, 2025
    News & Updates

    The Lenovo Legion Go 2 gets its first release date tease, which could be accurate — but treat with the biggest pinch of salt

    June 24, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    CVE-2023-26819 – cJSON Denial of Service (DoS)

    Common Vulnerabilities and Exposures (CVEs)

    Install VirtualBox on Kali Linux

    Learning Resources

    CVE-2025-44071 – SeaCMS Phomebak PHP Remote Code Execution Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    CVE-2025-34022 – Selea Targa IP OCR-ANPR Path Traversal Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Highlights

    News & Updates

    Is OpenAI’s new ChatGPT-4o image generator the end for graphic designers? — Weekend discussion 💬

    April 4, 2025

    With OpenAI’s new ChatGPT-4o image generator, professionals in the creative industry have expressed concern about…

    The biggest miss in gaming handhelds just got hit with a major sale, so is it worth buying now?

    April 14, 2025

    CVE-2025-26693 – OpenHarmony File Access Information Leak

    June 8, 2025

    PowerToys Run adds Internet speed test, video downloader & more

    June 10, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.