This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

read_storage panics - #3589

Merged
gavofyork merged 10 commits into
masterfrom
ser-fix-offset
Sep 11, 2019
Merged

read_storage panics#3589
gavofyork merged 10 commits into
masterfrom
ser-fix-offset

Conversation

@pepyakin

@pepyakinpepyakin commented Sep 10, 2019

Copy link
Copy Markdown
Contributor

There is a problem with read_storage, if an offset passed that is out of bounds of the length of the value the implementation of an extrinsic will panic. This PR solves it.

There is another problem with the API itself: there is no way to indicate how many bytes were read. So even if we fix the panic, the API wouldn't be universally usable since the API cannot indicate how many bytes it wrote to the buffer.

The API is not used within Substrate, except for implementing exists (e.g. this).

@pepyakin
pepyakin marked this pull request as ready for review September 11, 2019 12:36
@pepyakin
pepyakin requested a review from bkchrSeptember 11, 2019 12:36
@pepyakinpepyakin added the A0-please_review Pull request needs code review. label Sep 11, 2019
@gavofyork

gavofyork commented Sep 11, 2019

Copy link
Copy Markdown
Member

alternative here: #3597 which i prefer since it just forces a cap on the value rather than introducing a full conditional.

the API cannot indicate how many bytes it wrote to the buffer

let offset = /* whatever offset into the value we want to read from */;
let mut out = [0u8; /* whatever the buffer size is */]; if let Some(value_len) = read_storage(key, &mut out, offset) {
// offset will be truncated to the value's size.
let offset = offset.min(value_len);
// number of bytes written is the size of the value minus any offset into it that we start at
// and it will never be more than the size of the output buffer.
let bytes_written = out.len().min(value_len - offset);
}

@pepyakin

Copy link
Copy Markdown
ContributorAuthor

Ah, but in this case we don't return the original value's length here which panics with the following error

 left: `Some(0)`,
right: `Some(4)`', /builds/parity/substrate/core/test-runtime/src/lib.rs:919:2

@gavofyork

Copy link
Copy Markdown
Member

should do the trick.

@gavofyorkgavofyork added A8-looksgood and removed A0-please_review Pull request needs code review. labels Sep 11, 2019
@gavofyork
gavofyork merged commit 15a4c40 into masterSep 11, 2019
@gavofyork
gavofyork deleted the ser-fix-offset branch September 11, 2019 17:37
andresilva pushed a commit that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
Demi-Marie pushed a commit to Demi-Marie/substrate that referenced this pull request Sep 17, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
en pushed a commit to en/substrate that referenced this pull request Sep 24, 2019
* Add a failing test case
* Actual fix
* read_child_storage, fix wasm side
* Bump the impl version.
* Alternative (paritytech#3597)
* Update with_std.rs
* Update with_std.rs
* Update wasm_executor.rs
* Update wasm_executor.rs
* Update with_std.rs
* Update wasm_executor.rs
@bkchrbkchr mentioned this pull request Sep 11, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pepyakin@gavofyork