Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pl.stringx.rpartition: Working not correctly for strings not containing separator #299

Closed
USSX-Hares opened this issue May 28, 2019 · 4 comments · Fixed by #300
Closed

Comments

@USSX-Hares
Copy link

Code in python 3.6.7

Python 3.6.7 (default, Nov  7 2018, 14:07:33) 
>>> s = 'a.b.c'
>>> s, *_ = s.rpartition('.')
>>> s
'a.b'
>>> s, *_ = s.rpartition('.')
>>> s
'a'
>>> s, *_ = s.rpartition('.')
>>> s
''

Code in Penlight 1.5.4:

Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> (require 'pl.stringx'):import()
> s = 'a.b.c'
> s = s:rpartition('.')
> =s
a.b
> s = s:rpartition('.')
> =s
a
> s = s:rpartition('.')
> =s
a
> s = s:rpartition('.')
> return s
a
> a,b,c = s:rpartition('.')
> =a
a
> =b

> =c

> 
@Tieske
Copy link
Member

Tieske commented May 28, 2019

what happens if you update the call to s:rpartition('%.') ?

Reason being . is a magic character in Lua (I don't know about Python) and matches any character. If it still shows the same behaviour when using %. (escaped version) then I would consider it to be a bug.

@USSX-Hares
Copy link
Author

@Tieske it finds nothing - stringx's partition & rpartition use substring search rather than pattern matching.

> (require 'pl.stringx'):import()
> s = 'a.b.c'
> s = s:rpartition('%.')
> =s
a.b.c

@Tieske
Copy link
Member

Tieske commented May 29, 2019

@USSX-Hares matching is indeed done plain, not by patterns. So this is a bug then.

@Tieske
Copy link
Member

Tieske commented May 29, 2019

Fixed. Thx for the report 👍

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Feb 15, 2020
## 1.7.0 (2019-10-14)
### New features

  - `utils.quote_arg` will now optionally take an array of arguments and escape
    them all into a single string.
  - `app.parse_args` now accepts a 3rd parameter with a list of valid flags and aliasses
  - `app.script_name` returns the name of the current script (previously a private function)

### Changes

  - Documentation updates
  - `utils.quit`: exit message is no longer required, and closes the Lua state (on 5.2+).
  - `utils.assert_arg` and `utils.assert_string`: now return the validated value
  - `pl.compat`: now exports the `jit` and `jit52` flags
  - `pretty.write`: now sorts the output for easier diffs [#293](lunarmodules/Penlight#293)

### Fixes

  - `utils.raise` changed the global `on_error`-level when passing in bad arguments
  - `utils.writefile` now checks and returns errors when writing
  - `compat.execute` now handles the Windows exitcode -1 properly
  - `types.is_empty` would return true on spaces always, indepedent of the parameter
  - `types.to_bool` will now compare case-insensitive for the extra passed strings
  - `app.require_here` will now properly handle an absolute base path
  - `stringx.split` will no longer append an empty match if the number of requested
    elements has already been reached [#295](lunarmodules/Penlight#295)
  - `path.common_prefix` and `path.relpath` return the result in the original casing
    (only impacted Windows) [#297](lunarmodules/Penlight#297)
  - `dir.copyfile`, `dir.movefile`, and `dir.makepath` create the new file/path with
    the requested casing, and no longer force lowercase (only impacted Windows)
    [#297](lunarmodules/Penlight#297)
  - added a missing assertion on `path.getmtime` [#291](lunarmodules/Penlight#291)
  - `stringx.rpartition` returned bad results on a not-found [#299](lunarmodules/Penlight#299)

## 1.6.0 (2018-11-23)
### New features

  - `pl.compat` now provides `unpack` as `table.unpack` on Lua 5.1

### Changes

  - `utils.unpack` is now documented and respects `.n` field of its argument.
  - `tablex.deepcopy` and `tablex.deepcompare` are now cycle aware (#262)
  - Installing through LuaRocks will now include the full rendered documentation

### Fixes

  - Fixed `seq.last` returning `nil` instead of an empty list when given an empty iterator (#253).
  - `pl.template` now applies `tostring` when substituting values in templates, avoiding errors when they are not strings or numbers (#256).
  - Fixed `pl.import_into` not importing some Penlight modules (#268).
  - Fixed version number stuck at 1.5.2 (#260).
  - Fixed `types.is_empty` returning `true` on tables containing `false` key (#267).
  - Fixed `test.assertraise` throwing an error when passed an array with a function to call plus its arguments (#272).
  - Fixed `test.assertraise` not throwing an error when given function does not error but instead returns a string matching given error pattern.
  - Fixed placeholder expressions being evaluated with wrong precedence of binary and unary negation.
  - Fixed placeholder expressions being evaluated assuming wrong binary operator associativity (e.g. `_1-(_2+_3)` was evaluated as `(_1-_2)+_3`.
  - Fixed placeholder expressions being evaluated as if unary operators take precedence over power operator (e.g. `(-_1)^_2`) was evaluated as `-(_1^2)`).
  - Fixed vulnerable backtracking pattern in `pl.stringx.strip` (#275)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging a pull request may close this issue.

2 participants