check the size of fillchar passed to str methods (ljust, rjust)

This commit is contained in:
albertexye 2024-04-01 13:20:07 -04:00
parent cb15db1f0e
commit db9d6349b1
2 changed files with 12 additions and 0 deletions

View File

@ -734,6 +734,7 @@ void init_builtins(VM* _vm) {
int delta = width - self.u8_length();
if(delta <= 0) return args[0];
const Str& fillchar = CAST(Str&, args[2]);
if (fillchar.size != 1) vm->TypeError("The fill character must be exactly one character long");
SStream ss;
ss << self;
for(int i=0; i<delta; i++) ss << fillchar;
@ -747,6 +748,7 @@ void init_builtins(VM* _vm) {
int delta = width - self.u8_length();
if(delta <= 0) return args[0];
const Str& fillchar = CAST(Str&, args[2]);
if (fillchar.size != 1) vm->TypeError("The fill character must be exactly one character long");
SStream ss;
for(int i=0; i<delta; i++) ss << fillchar;
ss << self;

View File

@ -157,8 +157,18 @@ assert b[5:2:-2] == [',', 'l']
a = '123'
assert a.rjust(5) == ' 123'
assert a.rjust(5, '0') == '00123'
try:
a.rjust(5, '00')
exit(1)
except TypeError:
pass
assert a.ljust(5) == '123 '
assert a.ljust(5, '0') == '12300'
try:
a.ljust(5, '00')
exit(1)
except TypeError:
pass
assert '\x30\x31\x32' == '012'