Server variable UNENCODED_URL contains strange value instead of encoded slash - c++

We have a legacy IIS DLL that uses GetServerVariable (MSDN) to retrieve the value of UNENCODED_URL. When accessing the URL:
https://example.com/a%2Fb
the value retrieved will look like this:
/path/to/server.dll/a0.000000b
which is strange, because it should look like this:
/path/to/server.dll/a%2Fb
The LPEXTENSION_CONTROL_BLOCK's value of lpszPathInfo (MSDN) has the value:
/a/b
as expected.
Does anybody know why the UNENCODED_URL value looks like this and how can I retrieve the correct value?

If you’re using for example printf to output the value of the environment variable instead of using a debugger, or puts, that will explain it. %2f will be understood as a command to printf to output the first variable argument as a floating point number.
Always output strings with puts or other functions that do not alter the value.

Related

how to pass null or numeric value to http request variable in jmeter

I am having one http request as shown below to which I am passing value from jdbcPreProcessor query.
But it throws Could not convert string to integer: ${tooth_1,}.
In my case, From my jdbcPreProcessor I will get value either as null or integer. And why this failing is because when my ${tooth_1} fetches value from jdbcPreProcessor , it fetches null to which it treats as string. so where should I do typecasting and how?
Treatments": [
{
"tooth": "${tooth_1}",
}
],
My expectation is that the application you're testing expects an Integer and you're trying to send a String to it
If the assumption is correct all you need is to remove the quotation marks around this "${tooth_1}" so it would look like:
"tooth": ${tooth_1},
Also make sure that your ${tooth_1} JMeter Variable exists and has the anticipated value, it can be checked using Debug Sampler and View Results Tree listener combination

How to get correct size of substring?

I would like to match substring correctly.
re:run("étude", "é",[unicode]).
The result of running this code is {match,[{0,2}]}. This result looks like I use unnormilize Unicode string.
So next I try to add normalization:
re:run(unicode:characters_to_nfc_list("étude"), unicode:characters_to_nfc_list("é"),[unicode]).
The result was the same: {match,[{0,2}]}
How to describe Erlang (what kind of option I need to set) to get correct result of character size? I wold like get {match,[{0,1}]}
Try ucp instead of unicode option.
>re:run("étude", "é",[ucp]).
{match,[{0,1}]}

Why is _tcstod using my windows region settings when parsing a string?

Windows-related C++ question!
I'm trying to use _tcstod( ) to parse a string to obtain a float value. Normally, if I call
wchar_t* endPtr;
float result = static_cast<float>(_tcstod( "12.345678", &endPtr));
I get a float value of 12.345678 and endPtr behaves as expected. This actually misbehaves if I change my regional decimal delimiter in the Windows Region and Language settings. Specifically, if I change the decimal delimiter from "." to ",", suddenly _tcstod only returns a value of 12 rather than the whole thing. Anything after the . is chopped off.
Is there some way for me to parse the float value from the string while being agnostic to my Region settings?
Why is _tcstod using my windows region settings when parsing a string?
Because it is supposed to.
Is there some way for me to parse the float value from the string while being agnostic to my Region settings?
Of course. The simplest way, in C++, is to use a stringstream and imbue it with a default or "C" locale.

Nested Regexmatch Not Working on Range of Zeros and Ones

I have a sum filter formula and have nested a REGEXMATCH function within it as a condition to filter the range to be summed.
The full formula looks like:
=sum(filter(data,
region1=$AF$4,
industry=$A11,
quarter=AG$9,
REGEXMATCH(consent,"1")))
The range "consent" is just 0 or 1 for each value in the range.
When I run this function 0 is returned whereas I expect about 1,000.
The documentation for REGEXMATCH says
"This function only works with text (not numbers) as input and returns
text as output. If a number is desired as the output, try using the
VALUE function in conjunction with this function. If numbers are used
as input, convert them to text using the TEXT function."
I'm not sure what to do with that. I tried the following:
REGEXMATCH(consent,1) // no luck
REGEXMATCH(TEXT(consent),"1") // no luck
REGEXMATCH(TEXT(consent),TEXT(1)) // no luck
But, if I do this:
REGEXMATCH(consent,".*") // does work for all data in consent
How can I tell GSheets to REGEXMATCH on the range consent where it equals 1?
I think the documentation is a bit misleading, because while you can convert to text using the TEXT function (which requires a second argument that prescribes the format of the output, which is why your attempt was not working), it is probably not the easiest way to do it. Probably better would be TO_TEXT, or simply appending &"":
REGEXMATCH(TO_TEXT(consent),"1")
REGEXMATCH(consent&"","1")
That being said, is there a reason you can't just use consent=1 (in which case, you could just use consent by itself as an argument in FILTER)?

Converting argv back to a single string

I'm writing a (Win32 Console) program that wraps another process; it takes parameters as in the following example:
runas.exe user notepad foo.txt
That is: runas parses user and then will run notepad, passing the remaining parameters.
My problem is that argv is broken down into individual parameters, but CreateProcessAsUser requires a single lpszCommandLine parameter.
Building this command line is probably not as simple as just joining argv back together with spaces. Any pointers?
This is just an example. My first argument isn't actually a user name, and might have spaces in it. This makes manually parsing the result of GetCommandLine tricky.
Similarly, a naive concatenation of argv won't work, because it needs to deal with the case where the original arguments were quoted and might have spaces in them.
Manually recombining them is hard:
You could try to re-combine them, I think it would work, but be sure to following the same command line escaping rules that windows has. This could be more than the trivial solution you're looking for.
Also if there are any parameters that have spaces in them, then you would want to join them to the string with quotes around them. Here is an example of a strange escaping rule: if you have --folderpath "c:\test\" then the last backslash has to be doubled --folderpath "c:\test\\".
If you are using MFC:
You can can get the value you want from your derived CWinApp's theApp.m_lpCmdLine. Note you could still access them the other way too with __argc, and __argv or CommandLineToArgvW.
If you are using Win32 only (even without a GUI):
You can get it from WinMain. Which can be your program's entry point.
Note you could still access them the other way too with __argc, and __argv or CommandLineToArgvW.
If you must use a console based application with main or wmain:
The Win32 API GetCommandLine seems to be the way to go. You would need to still parse this to get past the .exe name though. Take into account quotes around the exe name/path too. If there are no such quotes at the start, then just go to the next space for the start.
You can use the GetCommandLine function.
Why not use 'WinMain' instead of 'main'? This should give you the string in the format you want.
There is Win32 API call that returns command line: GetCommandLine
Provided you have a string allocated with enough space then use strcat on each item in the list. Yes, it is as simple as joining them back together with spaces.
Edit: Of course, you would need to enclose any items containing spaces within quotes.