Chrome не может читать сообщение от нативного хоста длины сообщения, множество 256C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Chrome не может читать сообщение от нативного хоста длины сообщения, множество 256

Сообщение Anonymous »

Я строю расширение Chrome, которое использует местный хост обмена сообщениями для получения информации о DOM и передачи их в другое приложение. Во время моего тестирования мне удалось отправить сообщение в расширение Chrome, которое было ровно 266 байт в длину (270, учитывая 4 байта по длине). После некоторого исследования я обнаружил, что эта длина сообщения не единственная, что проблематична. Каждое кратное 256 (256, 512, 768, 1024, 1280, 1536, 1792, 2048, ... и особенно 2560), добавлены 10, иногда 20 и 30 , вызвал хромированное отопление от stdout хоста. Нативный хост продолжает отправлять данные и, в конечном счете, исключение « отправитель отправил неверное сообщение JSON; сообщение игнорируется. » появляется без контекста. После этого хром недействительный stdin нативного хоста, завершая его к концу. < /P>
Manifest < /p>

Код: Выделить всё

[...]
"manifest_version": 3,
"permissions": [
"storage",
"tabs",
"background",
"notifications",
"nativeMessaging",
"scripting",
"debugger"
],
"host_permissions": [
"https://*/*",
"http://*/*"
],
"background": {
"service_worker": "scripts/background.js"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"scripts/content.js"
]
}
],
[...]
< /code>
фоновый скрипт (образец) < /p>
const nativeID = "com.nmhost";
var nmhostPort = chrome.runtime.connectNative(nativeID);

const onNativeMessage = function (msg) {
// if (dbgFlag && dbgLvl == 3) {
//     console.log("Received: \n" + JSON.stringify(msg, null, 4));
// }
let ss = JSON.stringify(msg);
console.log(`Received:[${ss.length}]`);
return;
}

nmhostPort.onMessage.addListener(onNativeMessage);
nmhostPort.onDisconnect.addListener(function () {
console.error("NMHost Disconnected");
});
< /code>
Native Host (C ++) (образец) < /p>
/**
* @brief Get the Message from Chromium. If the length of the message is zero or less it does not read the message!
*
* @param buff The message buffer to return
* @return int32_t
*/
int32_t GetExtMessage(char *buff) {
// if stdin fails retry 3 times
for (int i = 0; i < STDIN_RETRY; i++) {
int32_t reqLen = 0;
std::cin.read(reinterpret_cast(&reqLen), 4);
if (reqLen > 0) {
std::cin.read(buff, reqLen);
return reqLen;
} else {
if (std::cin.fail()) {
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/79492312/chrome-fails-to-read-message-fron-native-host-if-the-message-length-is-multiple[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»