A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/python/cpython/commit/07bcf05fcf3fd1d4001e8e3489162e6d67638285 below:

Fixed possible DoS and arbitrary code execution when ha… · python/cpython@07bcf05 · GitHub

@@ -230,7 +230,9 @@ def test_plural_forms2(self):

230 230

x = t.ngettext('There is %s file', 'There are %s files', 2)

231 231

eq(x, 'Hay %s ficheros')

232 232 233 -

def test_hu(self):

233 +

# Examples from http://www.gnu.org/software/gettext/manual/gettext.html

234 + 235 +

def test_ja(self):

234 236

eq = self.assertEqual

235 237

f = gettext.c2py('0')

236 238

s = ''.join([ str(f(x)) for x in range(200) ])

@@ -248,6 +250,12 @@ def test_fr(self):

248 250

s = ''.join([ str(f(x)) for x in range(200) ])

249 251

eq(s, "00111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111")

250 252 253 +

def test_lv(self):

254 +

eq = self.assertEqual

255 +

f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2')

256 +

s = ''.join([ str(f(x)) for x in range(200) ])

257 +

eq(s, "20111111111111111111101111111110111111111011111111101111111110111111111011111111101111111110111111111011111111111111111110111111111011111111101111111110111111111011111111101111111110111111111011111111")

258 + 251 259

def test_gd(self):

252 260

eq = self.assertEqual

253 261

f = gettext.c2py('n==1 ? 0 : n==2 ? 1 : 2')

@@ -261,6 +269,12 @@ def test_gd2(self):

261 269

s = ''.join([ str(f(x)) for x in range(200) ])

262 270

eq(s, "20122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")

263 271 272 +

def test_ro(self):

273 +

eq = self.assertEqual

274 +

f = gettext.c2py('n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2')

275 +

s = ''.join([ str(f(x)) for x in range(200) ])

276 +

eq(s, "10111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222")

277 + 264 278

def test_lt(self):

265 279

eq = self.assertEqual

266 280

f = gettext.c2py('n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2')

@@ -273,6 +287,12 @@ def test_ru(self):

273 287

s = ''.join([ str(f(x)) for x in range(200) ])

274 288

eq(s, "20111222222222222222201112222220111222222011122222201112222220111222222011122222201112222220111222222011122222222222222220111222222011122222201112222220111222222011122222201112222220111222222011122222")

275 289 290 +

def test_cs(self):

291 +

eq = self.assertEqual

292 +

f = gettext.c2py('(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2')

293 +

s = ''.join([ str(f(x)) for x in range(200) ])

294 +

eq(s, "20111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")

295 + 276 296

def test_pl(self):

277 297

eq = self.assertEqual

278 298

f = gettext.c2py('n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2')

@@ -285,10 +305,73 @@ def test_sl(self):

285 305

s = ''.join([ str(f(x)) for x in range(200) ])

286 306

eq(s, "30122333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333012233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")

287 307 308 +

def test_ar(self):

309 +

eq = self.assertEqual

310 +

f = gettext.c2py('n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5')

311 +

s = ''.join([ str(f(x)) for x in range(200) ])

312 +

eq(s, "01233333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445553333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444")

313 + 288 314

def test_security(self):

289 315

raises = self.assertRaises

290 316

# Test for a dangerous expression

291 317

raises(ValueError, gettext.c2py, "os.chmod('/etc/passwd',0777)")

318 +

# issue28563

319 +

raises(ValueError, gettext.c2py, '"(eval(foo) && ""')

320 +

raises(ValueError, gettext.c2py, 'f"{os.system(\'sh\')}"')

321 +

# Maximum recursion depth exceeded during compilation

322 +

raises(ValueError, gettext.c2py, 'n+'*10000 + 'n')

323 +

self.assertEqual(gettext.c2py('n+'*100 + 'n')(1), 101)

324 +

# MemoryError during compilation

325 +

raises(ValueError, gettext.c2py, '('*100 + 'n' + ')'*100)

326 +

# Maximum recursion depth exceeded in C to Python translator

327 +

raises(ValueError, gettext.c2py, '('*10000 + 'n' + ')'*10000)

328 +

self.assertEqual(gettext.c2py('('*20 + 'n' + ')'*20)(1), 1)

329 + 330 +

def test_chained_comparison(self):

331 +

# C doesn't chain comparison as Python so 2 == 2 == 2 gets different results

332 +

f = gettext.c2py('n == n == n')

333 +

self.assertEqual(''.join(str(f(x)) for x in range(3)), '010')

334 +

f = gettext.c2py('1 < n == n')

335 +

self.assertEqual(''.join(str(f(x)) for x in range(3)), '100')

336 +

f = gettext.c2py('n == n < 2')

337 +

self.assertEqual(''.join(str(f(x)) for x in range(3)), '010')

338 +

f = gettext.c2py('0 < n < 2')

339 +

self.assertEqual(''.join(str(f(x)) for x in range(3)), '111')

340 + 341 +

def test_decimal_number(self):

342 +

self.assertEqual(gettext.c2py('0123')(1), 123)

343 + 344 +

def test_invalid_syntax(self):

345 +

invalid_expressions = [

346 +

'x>1', '(n>1', 'n>1)', '42**42**42', '0xa', '1.0', '1e2',

347 +

'n>0x1', '+n', '-n', 'n()', 'n(1)', '1+', 'nn', 'n n',

348 +

]

349 +

for expr in invalid_expressions:

350 +

with self.assertRaises(ValueError):

351 +

gettext.c2py(expr)

352 + 353 +

def test_nested_condition_operator(self):

354 +

self.assertEqual(gettext.c2py('n?1?2:3:4')(0), 4)

355 +

self.assertEqual(gettext.c2py('n?1?2:3:4')(1), 2)

356 +

self.assertEqual(gettext.c2py('n?1:3?4:5')(0), 4)

357 +

self.assertEqual(gettext.c2py('n?1:3?4:5')(1), 1)

358 + 359 +

def test_division(self):

360 +

f = gettext.c2py('2/n*3')

361 +

self.assertEqual(f(1), 6)

362 +

self.assertEqual(f(2), 3)

363 +

self.assertEqual(f(3), 0)

364 +

self.assertEqual(f(-1), -6)

365 +

self.assertRaises(ZeroDivisionError, f, 0)

366 + 367 +

def test_plural_number(self):

368 +

f = gettext.c2py('1')

369 +

self.assertEqual(f(1), 1)

370 +

self.assertRaises(ValueError, f, 1.0)

371 +

self.assertRaises(ValueError, f, '1')

372 +

self.assertRaises(ValueError, f, [])

373 +

self.assertRaises(ValueError, f, object())

374 + 292 375 293 376 294 377

class UnicodeTranslationsTest(GettextBaseTest):


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4