Skip to content

fix: guard against AttributeError on None values in convert.py#2599

Open
pranitaurlam wants to merge 2 commits intoOWASP:masterfrom
pranitaurlam:fix/convert-py-attribute-error-none-checks
Open

fix: guard against AttributeError on None values in convert.py#2599
pranitaurlam wants to merge 2 commits intoOWASP:masterfrom
pranitaurlam:fix/convert-py-attribute-error-none-checks

Conversation

@pranitaurlam
Copy link

Summary

Fixes #2495 — Two AttributeError vulnerabilities in scripts/convert.py where string methods were called on potentially None values.

  • Line 815: Added isinstance(k, str) check before calling k.strip(). This handles None keys that can appear in replacement_values when YAML data contains null keys (e.g. ~: "value"). Non-string keys are now skipped via the existing continue.
  • Line 894: Added a falsy check not convert_vars.args.layout before calling .lower(). If layout is None, the condition short-circuits and falls into the "all layouts" branch — the same safe default as an empty string.

Test plan

  • Run convert.py with a YAML file containing a null key (~: "value") — should no longer crash at line 815
  • Manually set convert_vars.args.layout = None and call get_valid_layout_choices() — should return all valid layouts without raising AttributeError
  • Normal usage (valid string layout values) continues to behave identically

🤖 Generated with Claude Code

Line 815: add isinstance(k, str) check before calling k.strip() to
handle None keys from malformed YAML data (e.g. null/~ keys).

Line 894: add falsy check on args.layout before calling .lower() to
prevent AttributeError when layout is None.

Fixes OWASP#2495

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Contributor

Build artifacts:

Name Link
Output files cornucopia-build-files.ce416a2ecf64461c512edf6d3996ea7112c793d5.zip

Translation Check Report

The following sentences/tags have issues in the translations:

Spanish

File: eop-cards-5.0-es.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00105, T00140

Russian

File: eop-cards-5.0-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00001, T00003, T00004, T00090, T00100, T00105, T00210, T00220, T00230, T00240, T00250, T00260, T00270, T00280, T00290, T00300, T00310, T00320, T00330, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00410, T00420, T00430, T00440, T00450, T00460, T00470, T00480

Russian

File: mobileapp-cards-1.0-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00120, T00130, T00220, T00240, T00310, T00311, T00320, T00330, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00510, T00520, T00530, T00610, T01010, T01070, T01160, T01170, T01180, T01200, T01210, T01220, T01301, T01411, T02680, T02690, T02700, T02710, T02720, T02730, T02780, T03010

Russian

File: mobileapp-cards-1.1-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00120, T00130, T00220, T00240, T00310, T00311, T00320, T00330, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00510, T00520, T00530, T00610, T01010, T01070, T01160, T01170, T01180, T01200, T01210, T01220, T01301, T01411, T02680, T02690, T02700, T02710, T02720, T02730, T02780, T03010

Spanish

File: webapp-cards-2.2-es.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00030, T00380, T01590, T02330, T02530, T02940, T03140, T03160, T03180, T03200, T03210, T03220, T03230, T03240, T03250, T03260, T03270, T03280, T03290, T03300, T03310, T03320, T03330, T03340, T03350, T03360, T03370, T03380, T03390, T03400, T03410, T03420, T03430, T03440, T03450, T03460, T03470, T03480, T03490, T03500, T03510, T03520, T03530, T03540, T03550, T03560, T03570, T03580, T03590, T03600, T03610, T03620, T03630, T03640, T03650, T03660, T03670, T03680, T03690, T03700, T03710, T03720, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775, T03800, T03810, T03820, T03830, T03840, T03850, T03860, T03870, T03900, T03940, T03950

French

File: webapp-cards-2.2-fr.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00200, T01100, T02330, T02530, T03110, T03120, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

Hungarian

File: webapp-cards-2.2-hu.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T00005, T00161, T00162, T01301, T01311, T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00030, T00140, T00145, T00200, T00210, T00220, T00230, T00240, T00300, T00320, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00500, T00510, T00520, T00600, T00610, T00700, T00710, T00720, T00730, T00740, T00750, T00760, T00770, T00780, T00790, T00800, T00810, T00830, T00840, T00900, T00910, T00920, T01000, T01020, T01060, T01100, T01110, T01120, T01130, T01140, T01150, T01160, T01170, T01190, T01200, T01240, T01250, T01260, T01270, T01280, T01290, T01300, T01400, T01410, T01420, T01430, T01431, T01440, T01450, T01500, T01510, T01520, T01530, T01540, T01550, T01560, T01570, T01571, T01580, T01590, T01600, T01610, T01700, T01710, T01720, T01730, T01740, T01800, T01810, T01811, T01820, T01900, T01910, T01920, T01930, T01940, T01960, T01970, T01980, T02000, T02010, T02020, T02030, T02040, T02100, T02120, T02140, T02200, T02220, T02240, T02250, T02260, T02280, T02290, T02300, T02310, T02320, T02330, T02340, T02400, T02410, T02420, T02440, T02450, T02460, T02480, T02490, T02500, T02510, T02520, T02530, T02540, T02600, T02610, T02620, T02630, T02650, T02680, T02690, T02700, T02710, T02720, T02730, T02760, T02770, T02790, T02800, T02810, T02820, T02840, T02850, T02860, T02870, T02880, T02890, T02900, T02910, T02920, T02930, T02940, T02950, T02960, T02970, T02980, T02990, T03000, T03020, T03100, T03110, T03120, T03130, T03140, T03150, T03160, T03170, T03190, T03200, T03210, T03220, T03230, T03240, T03250, T03260, T03270, T03280, T03290, T03300, T03310, T03320, T03330, T03340, T03350, T03360, T03370, T03380, T03390, T03400, T03410, T03420, T03430, T03450, T03460, T03470, T03480, T03490, T03500, T03510, T03520, T03530, T03540, T03550, T03560, T03570, T03580, T03590, T03600, T03610, T03620, T03630, T03640, T03650, T03660, T03670, T03680, T03690, T03700, T03710, T03720, T03730, T03740, T03750, T03760, T03770, T03771, T03772, T03773, T03774, T03775, T03800, T03810, T03820, T03830, T03840, T03900, T03920, T03950

Italian

File: webapp-cards-2.2-it.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02330, T02530, T02940, T03130, T03150, T03170, T03190, T03240, T03250, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

Dutch

File: webapp-cards-2.2-nl.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00500, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

Russian

File: webapp-cards-2.2-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T01411, T02330, T02530, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

hi

File: webapp-cards-3.0-hi.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T03390, T03400, T03410, T03560, T03570, T03610, T03620, T03630, T03640, T03650, T03670, T03680, T03690, T03700

Untranslated Tags

The following tags have identical text to English (not translated):

T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Italian

File: webapp-cards-3.0-it.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02330, T02530, T02940, T03130, T03150, T03170, T03190, T03240, T03250, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Dutch

File: webapp-cards-3.0-nl.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02270, T02290, T02330, T02530, T03130, T03150, T03170, T03190, T03240, T03250, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Russian

File: webapp-cards-3.0-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02330, T02530, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Add targeted tests across multiple files to cover previously untested
code paths:

- player_live/show_test: next_round when closed (not-last and last
  round), toggle_vote add/remove cycle, extended helper function
  assertions (last_round?, player_first, get_vote)
- game_live/show_test: handle_info with non-matching topic is ignored
- api_controller_test: game not found (404) and player not in game (404)
- card_controller_test: format_capec/1 returns refs unchanged
- core_components_test: copy_url_button, header, header2, button,
  primary_button rendering
- cornucopia_test: DealtCard.changeset/2, DealtCard.find/1 not found,
  Vote.changeset/2, Player.find/1 not found
- rate_limiter_plug_test: RateLimiterPlug.init/1 passthrough

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Contributor

Build artifacts:

Name Link
Output files cornucopia-build-files.aeae580d242e09d9962ad89618ed152a9f4de84b.zip

Translation Check Report

The following sentences/tags have issues in the translations:

Spanish

File: eop-cards-5.0-es.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00105, T00140

Russian

File: eop-cards-5.0-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00001, T00003, T00004, T00090, T00100, T00105, T00210, T00220, T00230, T00240, T00250, T00260, T00270, T00280, T00290, T00300, T00310, T00320, T00330, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00410, T00420, T00430, T00440, T00450, T00460, T00470, T00480

Russian

File: mobileapp-cards-1.0-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00120, T00130, T00220, T00240, T00310, T00311, T00320, T00330, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00510, T00520, T00530, T00610, T01010, T01070, T01160, T01170, T01180, T01200, T01210, T01220, T01301, T01411, T02680, T02690, T02700, T02710, T02720, T02730, T02780, T03010

Russian

File: mobileapp-cards-1.1-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00120, T00130, T00220, T00240, T00310, T00311, T00320, T00330, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00510, T00520, T00530, T00610, T01010, T01070, T01160, T01170, T01180, T01200, T01210, T01220, T01301, T01411, T02680, T02690, T02700, T02710, T02720, T02730, T02780, T03010

Spanish

File: webapp-cards-2.2-es.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00030, T00380, T01590, T02330, T02530, T02940, T03140, T03160, T03180, T03200, T03210, T03220, T03230, T03240, T03250, T03260, T03270, T03280, T03290, T03300, T03310, T03320, T03330, T03340, T03350, T03360, T03370, T03380, T03390, T03400, T03410, T03420, T03430, T03440, T03450, T03460, T03470, T03480, T03490, T03500, T03510, T03520, T03530, T03540, T03550, T03560, T03570, T03580, T03590, T03600, T03610, T03620, T03630, T03640, T03650, T03660, T03670, T03680, T03690, T03700, T03710, T03720, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775, T03800, T03810, T03820, T03830, T03840, T03850, T03860, T03870, T03900, T03940, T03950

French

File: webapp-cards-2.2-fr.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00200, T01100, T02330, T02530, T03110, T03120, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

Hungarian

File: webapp-cards-2.2-hu.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T00005, T00161, T00162, T01301, T01311, T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00020, T00030, T00140, T00145, T00200, T00210, T00220, T00230, T00240, T00300, T00320, T00340, T00350, T00360, T00370, T00380, T00390, T00400, T00500, T00510, T00520, T00600, T00610, T00700, T00710, T00720, T00730, T00740, T00750, T00760, T00770, T00780, T00790, T00800, T00810, T00830, T00840, T00900, T00910, T00920, T01000, T01020, T01060, T01100, T01110, T01120, T01130, T01140, T01150, T01160, T01170, T01190, T01200, T01240, T01250, T01260, T01270, T01280, T01290, T01300, T01400, T01410, T01420, T01430, T01431, T01440, T01450, T01500, T01510, T01520, T01530, T01540, T01550, T01560, T01570, T01571, T01580, T01590, T01600, T01610, T01700, T01710, T01720, T01730, T01740, T01800, T01810, T01811, T01820, T01900, T01910, T01920, T01930, T01940, T01960, T01970, T01980, T02000, T02010, T02020, T02030, T02040, T02100, T02120, T02140, T02200, T02220, T02240, T02250, T02260, T02280, T02290, T02300, T02310, T02320, T02330, T02340, T02400, T02410, T02420, T02440, T02450, T02460, T02480, T02490, T02500, T02510, T02520, T02530, T02540, T02600, T02610, T02620, T02630, T02650, T02680, T02690, T02700, T02710, T02720, T02730, T02760, T02770, T02790, T02800, T02810, T02820, T02840, T02850, T02860, T02870, T02880, T02890, T02900, T02910, T02920, T02930, T02940, T02950, T02960, T02970, T02980, T02990, T03000, T03020, T03100, T03110, T03120, T03130, T03140, T03150, T03160, T03170, T03190, T03200, T03210, T03220, T03230, T03240, T03250, T03260, T03270, T03280, T03290, T03300, T03310, T03320, T03330, T03340, T03350, T03360, T03370, T03380, T03390, T03400, T03410, T03420, T03430, T03450, T03460, T03470, T03480, T03490, T03500, T03510, T03520, T03530, T03540, T03550, T03560, T03570, T03580, T03590, T03600, T03610, T03620, T03630, T03640, T03650, T03660, T03670, T03680, T03690, T03700, T03710, T03720, T03730, T03740, T03750, T03760, T03770, T03771, T03772, T03773, T03774, T03775, T03800, T03810, T03820, T03830, T03840, T03900, T03920, T03950

Italian

File: webapp-cards-2.2-it.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02330, T02530, T02940, T03130, T03150, T03170, T03190, T03240, T03250, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

Dutch

File: webapp-cards-2.2-nl.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T01411

Untranslated Tags

The following tags have identical text to English (not translated):

T00500, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

Russian

File: webapp-cards-2.2-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T01411, T02330, T02530, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03771, T03772, T03773, T03774, T03775

hi

File: webapp-cards-3.0-hi.yaml

Missing Tags

The following tags are present in the English version but missing in this translation:

T03390, T03400, T03410, T03560, T03570, T03610, T03620, T03630, T03640, T03650, T03670, T03680, T03690, T03700

Untranslated Tags

The following tags have identical text to English (not translated):

T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Italian

File: webapp-cards-3.0-it.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02330, T02530, T02940, T03130, T03150, T03170, T03190, T03240, T03250, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Dutch

File: webapp-cards-3.0-nl.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02270, T02290, T02330, T02530, T03130, T03150, T03170, T03190, T03240, T03250, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

Russian

File: webapp-cards-3.0-ru.yaml

Untranslated Tags

The following tags have identical text to English (not translated):

T00380, T02330, T02530, T03130, T03150, T03170, T03190, T03240, T03260, T03350, T03420, T03470, T03490, T03540, T03580, T03710, T03730, T03750, T03770, T03772, T03774

@pranitaurlam
Copy link
Author

@sydseter Hi! I've pushed additional commits to this PR to address the CI coverage failure.

The "Build and run COPI Tests" check was failing because overall Elixir test coverage was at 85.8%, below the required 90% threshold.

I've added 248 lines of tests across 7 test files to cover previously untested code paths:

  • player_live/show_test.exsnext_round when round is closed (not-last and last round), toggle_vote add/remove cycle, extended helper function assertions
  • game_live/show_test.exshandle_info with a non-matching topic (covers the ignored-broadcast branch)
  • api_controller_test.exs — game not found (404) and player not in game (404) error paths
  • card_controller_test.exsformat_capec/1 return value
  • core_components_test.exscopy_url_button, header, header2, button, primary_button component rendering
  • cornucopia_test.exsDealtCard.changeset/2, DealtCard.find/1 not found, Vote.changeset/2, Player.find/1 not found
  • rate_limiter_plug_test.exsRateLimiterPlug.init/1 passthrough

Please let me know if there's anything else to fix before merging. Thank you!

Copy link
Collaborator

@sydseter sydseter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove all file changes except for convert.py

@khushal-winner
Copy link
Contributor

khushal-winner commented Mar 13, 2026

Please remove all file changes except for convert.py

@sydseter , please don't merge her PR, she didn't waited to get this issue assigned and it was clearly my raised issue #2495 , there is no problem in taking someone issue but she should ask it first and get assigned , she is breaking the rule of the Project and the meaning of Open-Source collaboration, she is not even putting effort to find a gap in the code only using ai to spam PRs on existing issues which she has not rasied and was not assigned, i will raise a PR for this shortly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AttributeError Vulnerabilities in convert.py

3 participants