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

      Top 15 Enterprise Use Cases That Justify Hiring Node.js Developers in 2025

      July 31, 2025

      The Core Model: Start FROM The Answer, Not WITH The Solution

      July 31, 2025

      AI-Generated Code Poses Major Security Risks in Nearly Half of All Development Tasks, Veracode Research Reveals   

      July 31, 2025

      Understanding the code modernization conundrum

      July 31, 2025

      Not just YouTube: Google is using AI to guess your age based on your activity – everywhere

      July 31, 2025

      Malicious extensions can use ChatGPT to steal your personal data – here’s how

      July 31, 2025

      What Zuckerberg’s ‘personal superintelligence’ sales pitch leaves out

      July 31, 2025

      This handy NordVPN tool flags scam calls on Android – even before you answer

      July 31, 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

      Route Optimization through Laravel’s Shallow Resource Architecture

      July 31, 2025
      Recent

      Route Optimization through Laravel’s Shallow Resource Architecture

      July 31, 2025

      This Week in Laravel: Laracon News, Free Laravel Idea, and Claude Code Course

      July 31, 2025

      Everything We Know About Pest 4

      July 31, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      FOSS Weekly #25.31: Kernel 6.16, OpenMandriva Review, Conky Customization, System Monitoring and More

      July 31, 2025
      Recent

      FOSS Weekly #25.31: Kernel 6.16, OpenMandriva Review, Conky Customization, System Monitoring and More

      July 31, 2025

      Windows 11’s MSN Widgets board now opens in default browser, such as Chrome (EU only)

      July 31, 2025

      Microsoft’s new “move to Windows 11” campaign implies buying OneDrive paid plan

      July 31, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: Gridding My Teeth

    CodeSOD: Gridding My Teeth

    June 12, 2025

    Dan‘s co-workers like passing around TDWTF stories, mostly because seeing code worse than what they’re writing makes them feel less bad about how often they end up hacking things together.

    One day, a co-worker told Dan: “Hey, I think I found something for that website with the bad code stories!”

    Dan’s heart sank. He didn’t really want to shame any of his co-workers. Fortunately, the source-control history put the blame squarely on someone who didn’t work there any more, so he felt better about submitting it.

    This is another ASP .Net page, and this one made heavy use of GridView elements. GridView controls applied the logic of UI controls to generating a table. They had a page which contained six of these controls, defined like this:

    <asp:GridView ID="gvTaskMonth1" runat="server" CssClass="leadsGridView" AutoGenerateColumns="False" OnRowDataBound="gvTaskMonth1_RowDataBound"> ... </asp:GridView>
    
    <asp:GridView ID="gvTaskMonth2" runat="server" CssClass="leadsGridView" AutoGenerateColumns="False" OnRowDataBound="gvTaskMonth1_RowDataBound"> ... </asp:GridView>
    
    <asp:GridView ID="gvTaskMonth3" runat="server" CssClass="leadsGridView" AutoGenerateColumns="False" OnRowDataBound="gvTaskMonth1_RowDataBound"> ... </asp:GridView>
    

    The purpose of this screen was to display a roadmap of coming tasks, broken up by how many months in the future they were. The first thing that leaps out to me is that they all use the same event handler for binding data to the table, which isn’t in-and-of-itself a problem, but the naming of it is certainly a recipe for confusion.

    Now, to bind these controls to the data, there needed to be some code in the code-behind of this view which handled that. That’s where the WTF lurks:

    /// <summary>
    /// Create a roadmap for the selected client
    /// </summary>
    
    private void CreateRoadmap()
    {
    	for (int i = 1; i < 7; i++)
    	{
    		switch (i)
    		{
    			case 1:
    				if (gvTaskMonth1.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth1, DateTime.Parse(txtDatePeriod1.Text), "1");
    				}
    				break;
    			case 2:
    				if (gvTaskMonth2.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth2, DateTime.Parse(txtDatePeriod2.Text), "2");
    				}
    				break;
    			case 3:
    				if (gvTaskMonth3.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth3, DateTime.Parse(txtDatePeriod3.Text), "3");
    				}
    				break;
    			case 4:
    				if (gvTaskMonth4.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth4, DateTime.Parse(txtDatePeriod4.Text), "4");
    				}
    				break;
    			case 5:
    				if (gvTaskMonth5.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth5, DateTime.Parse(txtDatePeriod5.Text), "5");
    				}
    				break;
    			case 6:
    				if (gvTaskMonth6.Rows.Count > 0)
    				{
    					InsertTasks(gvTaskMonth6, DateTime.Parse(txtDatePeriod6.Text), "6");
    				}
    				break;
    		}
    	}
    }
    

    Ah, the good old fashioned loop-switch sequence anti-pattern. I understand the motivation: “I want to do the same thing for six different controls, so I should use a loop to not repeat myself,” but then couldn’t quite figure out how to do that, so they just repeated themselves, but inside of a loop.

    The “fix” was to replace all of this with something more compact:

    	private void CreateRoadmap()
    	{
    		InsertTasks(gvTaskMonth1, DateTime.Parse(txtDatePeriod1.Text), "1");
    		InsertTasks(gvTaskMonth2, DateTime.Parse(txtDatePeriod2.Text), "2");
    		InsertTasks(gvTaskMonth3, DateTime.Parse(txtDatePeriod3.Text), "3");
    		InsertTasks(gvTaskMonth4, DateTime.Parse(txtDatePeriod4.Text), "4");
    		InsertTasks(gvTaskMonth5, DateTime.Parse(txtDatePeriod5.Text), "5");
    		InsertTasks(gvTaskMonth6, DateTime.Parse(txtDatePeriod6.Text), "6"); 
    	}
    

    That said, I’d recommend not trying to parse date times inside of a text box inside of this method, but that’s just me. Bubbling up the inevitable FormatException that this will generate is going to be a giant nuisance. It’s likely that they’ve got a validator somewhere, so it’s probably fine- I just don’t like it.

    [Advertisement]
    Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleFlaws in Weidmueller IE-SR-2TX Routers Allow Remote Root Access!
    Next Article Schemes – create syntax highlighting schemes

    Related Posts

    News & Updates

    Not just YouTube: Google is using AI to guess your age based on your activity – everywhere

    July 31, 2025
    News & Updates

    Malicious extensions can use ChatGPT to steal your personal data – here’s how

    July 31, 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

    Tsukimi is a third-party Emby client

    Linux

    CISA Adds Two New Exploited Vulnerabilities to Its Catalog: CVE-2024-38475 and CVE-2023-44221

    Security

    CVE-2025-54377 – Roo Code Multi-Line Command Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Microsoft yanks its Movies & TV store, ending a 19-year video experiment

    Operating Systems

    Highlights

    CVE-2025-7418 – Tenda O3V2 HTTPd destIP Stack-Based Buffer Overflow

    July 10, 2025

    CVE ID : CVE-2025-7418

    Published : July 10, 2025, 11:15 p.m. | 2 hours, 30 minutes ago

    Description : A vulnerability was found in Tenda O3V2 1.0.0.12(3880) and classified as critical. Affected by this issue is the function fromPingResultGet of the file /goform/setPing of the component httpd. The manipulation of the argument destIP leads to stack-based buffer overflow. The attack may be launched remotely. The exploit has been disclosed to the public and may be used.

    Severity: 8.8 | HIGH

    Visit the link for more details, such as CVSS details, affected products, timeline, and more…

    Infragistics Ultimate 25.1 includes updates across several of its UI toolkit components

    May 29, 2025

    Diabetes Detection System using PHP and MYSQL

    May 3, 2025

    CVE-2025-23393 – Spacewalk Java Basic XSS

    May 27, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

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