`call_graph_url()` serializes POSIXct body fields as ambiguous, offset-less datetime strings
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 75/100
Direzione di ricerca
Inizia in R/call_graph.R, in call_graph_url(), e riproduci l'output JSON mostrato nell'issue con un valore POSIXct. Traccia il modo in cui vengono serializzati i valori del corpo della richiesta, quindi verifica che i valori POSIXct diventino stringhe UTC ISO 8601 che terminano con Z e che i valori Date utilizzino il formato di data previsto, anche quando sono annidati nel corpo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
call_graph_url() serializes JSON request bodies with:
# R/call_graph.R, call_graph_url()
body <- jsonlite::toJSON(body[!null], auto_unbox = TRUE, digits = 22, null = "null")
This uses jsonlite's default POSIXt = "string" handling, which calls format()/as.character() on POSIXct values. That respects the object's tzone attribute but appends no UTC offset or "Z" suffix, so the resulting string is ambiguous about what instant it represents.
Microsoft Graph's OData Edm.DateTimeOffset fields expect an explicit ISO 8601 string with a Z or numeric offset (e.g. "2022-07-31T14:05:19Z"); sending a bare "2022-07-31 14:05:19" leaves Graph to guess the offset, which I think resolves against the site/tenant's regional timezone, silently shifting the stored instant away from the value the caller intended.
library(jsonlite)
x <- as.POSIXct(1659276319, origin = "1970-01-01", tz = "UTC")
# This mirrors call_graph_url()'s exact serialization call:
jsonlite::toJSON(
list(dateTimeField = x),
auto_unbox = TRUE,
digits = 22,
null = "null"
)
#> {"dateTimeField":"2022-07-31 14:05:19"}
# Confirming it's not just a formatting-style choice: jsonlite's "ISO8601"
# option has the same ambiguity, just with a "T" separator instead of a space
jsonlite::toJSON(list(dateTimeField = x), POSIXt = "ISO8601", auto_unbox = TRUE)
#> {"dateTimeField":"2022-07-31T14:05:19"}
# still no "Z"/offset
# The only unambiguous encoding requires explicit UTC formatting:
strftime(x, "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
#> [1] "2022-07-31T14:05:19Z"
Created on 2026-09-09 with reprex v2.1.1
Expected: A POSIXct value passed in a request body to call_graph_url() should serialize to an unambiguous ISO 8601 UTC string (...Z) matching what Graph's OData Edm.DateTimeOffset fields expect, regardless of the POSIXct object's tzone attribute or the caller's Sys.timezone().
Actual: The serialized string carries no UTC marker at all, so any Graph endpoint accepting a dateTime/DateTimeOffset field is handed an ambiguous value whenever a caller passes a native POSIXct.
Suggested fix: In call_graph_url(), before calling jsonlite::toJSON(), recursively convert any POSIXct (and Date) elements of body to explicit UTC ISO 8601 strings, e.g. strftime(x, "%Y-%m-%dT%H:%M:%SZ", tz = "UTC") for POSIXct and strftime(x, "%Y-%m-%d", tz = "UTC") for Date. Neither of jsonlite's built-in POSIXt options ("string", "ISO8601") is sufficient on their own, since neither appends a UTC offset.
- Lingua principale
- R
- Stelle
- 38
- Fork
- 22
- Merge medio
- 2g 8h
- PR unite (30g)
- 1
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Azure/AzureGraph
-
Issue listing shared items Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
Azure/AzureGraph#37 · 1 commento ·
Tutte le issue di Azure/AzureGraph
Issue simili
-
documentation pkg infrastructure
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
epiverse-trace/epiparameter#511 ·
-
Stray pipe in eventRemarks Apertafunction:write_dwc
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Urgent request: Due to vulnerabilities move to API version 12.6.1 (12.6.2 eventually) or 13.1.1 Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
jbkunst/highcharter#849 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
r-lib/pkgdepends#485 · 3 commenti ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100