This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel
, '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 Jul 22, 2024. It is now read-only.

Fix time.Time hashes - #21

Merged
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time
Nov 22, 2020
Merged

Fix time.Time hashes#21
mitchellh merged 1 commit into
mitchellh:masterfrom
F21:support-time.Time

Conversation

@F21

@F21F21 commented Feb 13, 2019

Copy link
Copy Markdown
Contributor

Fixes#16.

time.Time is a struct without any exported values. The current implementation treats it as a struct. Since it does not have any exported values, it's hashed as a struct with the name Time and nothing else. This means that any time.Time that is hashed will produce the same result, regardless of what its internal values are.

I added a check to check if the type being hashed is a time.Time, then use it to hash the binary version of the time (produced using the MarshalBinary() method). The MarshalBinary() method was used because it drops the monotonic clock component of the time before returning the binary representation, otherwise, 2 identical times with different monotonic clock components will generate different hashes.

@F21

F21 commented Feb 21, 2019

Copy link
Copy Markdown
ContributorAuthor

ping @mitchellh

@mibr020

mibr020 commented Jun 17, 2019

Copy link
Copy Markdown

@F21 Can I fork this and work on a fix since this PR is inactive

EDIT: ah you're waiting for @mitchellh to review this sorry i thought someone is waiting on the fix to be worked on

@F21

F21 commented Jun 17, 2019

Copy link
Copy Markdown
ContributorAuthor

@mibr020 I am just waiting for a review or a merge at the moment. Hopefully someone can get aroud to it soon.

@mitchellh

Copy link
Copy Markdown
Owner

This looks good. Thanks! Sorry this took literal years. Haha.

@mitchellh
mitchellh merged commit ef219f8 into mitchellh:masterNov 22, 2020
@F21
F21 deleted the support-time.Time branch November 22, 2020 01:42
@adamhassel

Copy link
Copy Markdown
Contributor

Pretty sure this breaks hashing for time.Time values that has a string tag (or if the UseString option is on)...

@adamhasseladamhassel mentioned this pull request May 17, 2022
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.

Hashing time.Time does not generate unique hashes

4 participants

@F21@mibr020@mitchellh@adamhassel