Revert "libexpr: Fix prim_replaceStrings() to work on an empty source string"
This reverts commit 4ea9707591.
It causes an infinite loop in Nixpkgs evaluation,
e.g. "nix-instantiate -A hello" hung.
PR #1886.
			
			
This commit is contained in:
		
							parent
							
								
									a6c497f526
								
							
						
					
					
						commit
						e2d71bd186
					
				
					 3 changed files with 4 additions and 11 deletions
				
			
		|  | @ -1913,26 +1913,21 @@ static void prim_replaceStrings(EvalState & state, const Pos & pos, Value * * ar | |||
|     auto s = state.forceString(*args[2], context, pos); | ||||
| 
 | ||||
|     string res; | ||||
|     // Loops one past last character to handle the case where 'from' contains an empty string.
 | ||||
|     for (size_t p = 0; p <= s.size(); ) { | ||||
|     for (size_t p = 0; p < s.size(); ) { | ||||
|         bool found = false; | ||||
|         auto i = from.begin(); | ||||
|         auto j = to.begin(); | ||||
|         for (; i != from.end(); ++i, ++j) | ||||
|             if (s.compare(p, i->size(), *i) == 0) { | ||||
|                 found = true; | ||||
|                 p += i->size(); | ||||
|                 res += j->first; | ||||
|                 if (i->empty()) { | ||||
|                     res += s[p++]; | ||||
|                 } else { | ||||
|                     p += i->size(); | ||||
|                 } | ||||
|                 for (auto& path : j->second) | ||||
|                     context.insert(path); | ||||
|                 j->second.clear(); | ||||
|                 break; | ||||
|             } | ||||
|         if (!found && p < s.size()) res += s[p++]; | ||||
|         if (!found) res += s[p++]; | ||||
|     } | ||||
| 
 | ||||
|     mkString(v, res, context); | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| [ "faabar" "fbar" "fubar" "faboor" "fubar" "XaXbXcX" "X" ] | ||||
| [ "faabar" "fbar" "fubar" "faboor" "fubar" ] | ||||
|  |  | |||
|  | @ -5,6 +5,4 @@ with builtins; | |||
|   (replaceStrings ["oo"] ["u"] "foobar") | ||||
|   (replaceStrings ["oo" "a"] ["a" "oo"] "foobar") | ||||
|   (replaceStrings ["oo" "oo"] ["u" "i"] "foobar") | ||||
|   (replaceStrings [""] ["X"] "abc") | ||||
|   (replaceStrings [""] ["X"] "") | ||||
| ] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue