You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/Secure-Coding-Guide-for-Python/CWE-707/CWE-175/README.md
+41-24Lines changed: 41 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,6 +30,7 @@ WORD = "Title"
30
30
print(word.upper())
31
31
locale.setlocale(locale.LC_ALL, "tr_TR.utf8")
32
32
print(word.upper())
33
+
33
34
```
34
35
35
36
This code example incorrectly assumes that the uppercasing rules in Turkish will be followed. The expected output is "TİTLE" (with captial dotted-i), but instead the value outputted by the code is "TITLE" (with capital dotless-i). The only way to ensure capitalization is handled correctly is either manually mapping upper-case characters or using an external library, such as [PyICU](https://pypi.org/project/PyICU/).
@@ -47,10 +48,12 @@ In this example, `strftime("%B")` in the English (Ireland) locale returns "March
@@ -113,10 +123,11 @@ Set the locale to the locale the program was developed or validated against, to
113
123
*[example02.py](example02.py):*
114
124
115
125
```python
116
-
"""Compliant Code Example """
126
+
""" Code Example """
117
127
import locale
118
128
CURRENT_LOCALE='en_IE.utf8'
119
129
locale.setlocale(locale.LC_ALL, CURRENT_LOCALE)
130
+
120
131
```
121
132
122
133
For example, reading values from a data file values might be misinterpreted if the developer is unaware that the program locale does not accommodate the data locale.
@@ -132,31 +143,35 @@ When using `setlocale()`, ensure that it is not set in libraries or set more tha
132
143
*[example03.py](example03.py):*
133
144
134
145
```python
135
-
"""Non-compliant Code Example """
146
+
""" Code Example """
136
147
import locale
137
148
ORIGINAL_NUMBER=12.345# This will read as 12,345 in German
138
-
149
+
150
+
139
151
defcompare_number(number):
140
152
input_number = locale.atof(input("Enter a number: "))
141
153
# Test if inputted number equals current number
142
154
return number == input_number
143
155
156
+
144
157
print(f"Locale is {locale.getlocale()}")
145
158
print(f"Do the numbers match? {compare_number(ORIGINAL_NUMBER)}")
146
159
147
-
## Locale is ('English_Ireland', '1252')
148
-
## Enter a number: 12,345
149
-
## Do the numbers match? False
160
+
# Console output:
161
+
# Locale is ('English_Ireland', '1252')
162
+
# Enter a number: 12,345
163
+
# Do the numbers match? False
150
164
151
165
# After setting the locale
152
166
153
167
locale.setlocale(locale.LC_ALL, 'de_DE.utf8')
154
168
print(f"Locale is {locale.getlocale()}")
155
169
print(f"Do the numbers match? {compare_number(ORIGINAL_NUMBER)}")
156
170
157
-
## Locale is ('de_DE', 'UTF-8')
158
-
## Enter a number: 12,345
159
-
## Do the numbers match? True
171
+
# Console output:
172
+
# Locale is ('de_DE', 'UTF-8')
173
+
# Enter a number: 12,345
174
+
# Do the numbers match? True
160
175
161
176
```
162
177
@@ -169,12 +184,12 @@ The developer should be aware of the text encoding that is used for input data a
169
184
```python
170
185
""" Non-compliant Code Example """
171
186
import io
172
-
187
+
173
188
LOREM="""Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
174
189
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
175
190
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""
@@ -183,6 +198,7 @@ print(f"{len(output.getvalue().decode('utf-16le'))} characters in string")
183
198
# exploiting above code example
184
199
#####################
185
200
# UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x2e in position 1336: truncated data
201
+
186
202
```
187
203
188
204
## Compliant Solution (Encoding)
@@ -194,12 +210,12 @@ The correct text encoding, UTF-8 for the LOREM `TextIOWrapper` stream has been i
194
210
```python
195
211
""" Compliant Code Example """
196
212
import io
197
-
213
+
198
214
LOREM="""Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
199
215
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
200
216
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""
Copy file name to clipboardExpand all lines: docs/Secure-Coding-Guide-for-Python/CWE-707/CWE-175/compliant02.py
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -2,11 +2,11 @@
2
2
# SPDX-License-Identifier: MIT
3
3
""" Compliant Code Example """
4
4
importio
5
-
5
+
6
6
LOREM="""Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
7
7
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
8
8
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""
Copy file name to clipboardExpand all lines: docs/Secure-Coding-Guide-for-Python/CWE-707/CWE-175/noncompliant02.py
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -2,11 +2,11 @@
2
2
# SPDX-License-Identifier: MIT
3
3
""" Non-compliant Code Example """
4
4
importio
5
-
5
+
6
6
LOREM="""Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
7
7
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
8
8
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."""
0 commit comments