annotate src/if_ole.idl @ 34854:97b5457962ed v9.1.0296

patch 9.1.0296: regexp: engines do not handle case-folding well Commit: https://github.com/vim/vim/commit/7a27c108e0509f3255ebdcb6558e896c223e4d23 Author: Christian Brabandt <cb@256bit.org> Date: Tue Apr 9 22:53:19 2024 +0200 patch 9.1.0296: regexp: engines do not handle case-folding well Problem: Regex engines do not handle case-folding well Solution: Correctly calculate byte length of characters to skip When the regexp engine compares two utf-8 codepoints case insensitively it may match an adjacent character, because it assumes it can step over as many bytes as the pattern contains. This however is not necessarily true because of case-folding, a multi-byte UTF-8 character can be considered equal to some single-byte value. Let's consider the pattern '?' and the string 's'. When comparing and ignoring case, the single character 's' matches, and since it matches Vim will try to step over the match (by the amount of bytes of the pattern), assuming that since it matches, the length of both strings is the same. However in that case, it should only step over the single byte value 's' so by 1 byte and try to start matching after it again. So for the backtracking engine we need to ensure: - we try to match the correct length for the pattern and the text - in case of a match, we step over it correctly The same thing can happen for the NFA engine, when skipping to the next character to test for a match. We are skipping over the regstart pointer, however we do not consider the case that because of case-folding we may need to adjust the number of bytes to skip over. So this needs to be adjusted in find_match_text() as well. A related issue turned out, when prog->match_text is actually empty. In that case we should try to find the next match and skip this condition. fixes: #14294 closes: #14433 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 09 Apr 2024 23:00:08 +0200
parents 9fbb40a1228a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 // if_ole.idl - IDL source for the Vim OLE Automation interface
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 //
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 // Processed by the IDL compiler (MIDL) to generate the type library
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 // (Vim.tlb).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 //
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 // Command line:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 // MIDL /proxy nul /iid iid_ole.c /h if_ole.h /tlb vim.tlb if_ole.idl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 [
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 object,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 uuid(0F0BFAE2-4C90-11d1-82D7-0004AC368519), // IID_IVim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 helpstring("IVim"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 pointer_default(unique),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 dual,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 oleautomation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 ]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 interface IVim : IDispatch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 import "oaidl.idl";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 HRESULT SendKeys([in]BSTR keys);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 HRESULT Eval([in]BSTR expr, [out, retval]BSTR* result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 HRESULT SetForeground(void);
1569
9fbb40a1228a updated for version 7.1-282
vimboss
parents: 7
diff changeset
23 HRESULT GetHwnd([out, retval]UINT_PTR* result);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 // Component and type library definitions
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 [
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 uuid(0F0BFAE0-4C90-11d1-82D7-0004AC368519), // LIBID_Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 helpstring("Vim OLE Interface 1.1 Type Library"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 version(1.1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 ]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 library Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 importlib("stdole32.tlb");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 // Component
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 [
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 uuid(0F0BFAE1-4C90-11d1-82D7-0004AC368519), // CLSID_Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 helpstring("Vim OLE Interface")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 ]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 coclass Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 [default] interface IVim;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 };